データ処理のテクニック

PySpark でデータをクレンジングする

Mike Metzger

Data Engineering Consultant

何をパースするのか?

  • 不正なデータ
    • 空行
    • コメント行
    • ヘッダー
  • ネスト構造
    • 複数の区切り文字
  • 非正則データ
    • 行ごとに列数が異なる
  • 対象はCSVデータ中心
width, height, image

# This is a comment
200    300    affenpinscher;0
600    450    Collie;307    Collie;101
600    449    Japanese_spaniel;23
PySpark でデータをクレンジングする

Stanford ImageNet アノテーション

  • 画像内の犬種を特定
  • 画像内の全犬一覧を提供
  • その他メタデータ(基準フォルダ、画像サイズなど)

行の例:

02111277    n02111277_3206    500    375    Newfoundland,110,73,416,298
02108422    n02108422_4375    500    375    bull_mastiff,101,90,214,356 \
 bull_mastiff,282,74,416,370
PySpark でデータをクレンジングする

空行・ヘッダー・コメントの除去

SparkのCSVパーサ:

  • 空行を自動削除
  • 省略可能な引数でコメントを削除
df1 = spark.read.csv('datafile.csv.gz', comment='#')
  • ヘッダーフィールドに対応
    • 引数で指定
    • スキーマ定義時は無視
df1 = spark.read.csv('datafile.csv.gz', header='True')
PySpark でデータをクレンジングする

列の自動作成

Spark は次を行います:

  • sep 引数に基づき DataFrame の列を自動作成
    df1 = spark.read.csv('datafile.csv.gz', sep=',')
    
  • 既定は ,
  • 文字列内に sep がなくてもパース可能
    df1 = spark.read.csv('datafile.csv.gz', sep='*')
    
  • データはデフォルトで _c0 列に格納
  • 入れ子の区切りにも適切に対応可能
PySpark でデータをクレンジングする

練習してみましょう!

PySpark でデータをクレンジングする

Preparing Video For Download...