1. pysparkの独学を進めたい
pysparkに興味を持ったので独学を進めたいと思います。
Pandasなど別のデータ加工処理とは文法が全く異なるので最初のうちはpysparkを使いこなせません。
sparkによるデータ加工になれることも目的としています。
2. この記事で使用するデータで演習問題
「データサイエンティスト協会スキル定義委員」の「データサイエンス100本ノック(構造化データ加工編)」を利用しています
上記に含まれるデータ(CSVファイル)と演習問題を利用させていただきます。
3. 事前準備その1; SparkSession Create
ipython上でpysparkを使用するためのおまじないです。
import pyspark
from pyspark.sql import SparkSession
spark = SparkSession.builder.getOrCreate()
4. 事前準備その2; Read Csv
最初のうちはなれないのでCSVファイルを読み込むのも一苦労です。
pyspark.sql.DataFrameとして読み込みます。Pandas.DataFrameとは全くの別物です。
receipt = spark.read.option(
"header",
True,
).csv(
'100dscsv/receipt.csv'
)
5. P-001: レシート明細のデータフレーム(df_receipt)から全項目の先頭10件を表示し、どのようなデータを保有しているか目視で確認せよ。
receipt.show(10)
5.1. headではなくshow?
pyspark.sql.DataFrame.headではRow形式での出力となります。
output head
[Row(sales_ymd='20181103', sales_epoch='1541203200', store_cd='S14006', receipt_no='112', receipt_sub_no='1', customer_id='CS006214000001', product_cd='P070305012', quantity='1', amount='158'),
Row(sales_ymd='20181118', sales_epoch='1542499200', store_cd='S13008', receipt_no='1132', receipt_sub_no='2', customer_id='CS008415000097', product_cd='P070701017', quantity='1', amount='81'),
Row(sales_ymd='20170712', sales_epoch='1499817600', store_cd='S14028', receipt_no='1102', receipt_sub_no='1', customer_id='CS028414000014', product_cd='P060101005', quantity='1', amount='170')]
ちなみにshowの場合のアウトプット。
output show
+---------+-----------+--------+----------+--------------+--------------+----------+--------+------+
|sales_ymd|sales_epoch|store_cd|receipt_no|receipt_sub_no| customer_id|product_cd|quantity|amount|
+---------+-----------+--------+----------+--------------+--------------+----------+--------+------+
| 20181103| 1541203200| S14006| 112| 1|CS006214000001|P070305012| 1| 158|
| 20181118| 1542499200| S13008| 1132| 2|CS008415000097|P070701017| 1| 81|
| 20170712| 1499817600| S14028| 1102| 1|CS028414000014|P060101005| 1| 170|
+---------+-----------+--------+----------+--------------+--------------+----------+--------+------+
only showing top 3 rows
出力形式は好みかもしれませんが、Showのほうが結果を見やすいような気がします。