0

私は(5GBの圧縮ファイル)をメモリ(aws)に読み込み、データフレームを作成して、それを小さなデータフレームに分割しようとしています。 2つの列の値。最終的には、これらのサブセットをすべてそれぞれのファイルに書きたいと思います。巨大なデータフレームを小さなデータフレームに分割し、SPARK(Python)を使ってファイルに書き込む

私は、スパークで実験を始め、データ構造に慣れてきました。私が従おうとしていたアプローチは、このようなものでした。

  • は、これらの2列
  • のすべての値の独自のリストを識別2列でファイル

  • ソートそれを読んで(再パーティションと、まだ慣れていないし、それが役立つかどうかを知りません)
  • リスト の値を使用してフィルタリングすることにより、より小さなデータフレームを作成 - - このリスト を反復処理ファイルへの書き込み

    df.sort("DEVICE_TYPE", "PARTNER_POS") 
    df.registerTempTable("temp") 
    grp_col = sqlContext.sql("SELECT DEVICE_TYPE, PARTNER_POS FROM temp GROUP BY DEVICE_TYPE, PARTNER_POS") 
    print(grp_col) 
    

私はこれがよりクリーンで効率的なやり方であるとは思いません。出力に基づいて並列実行されるetlがあるので、これをファイルに書き込む必要があります。どんな勧告?

答えて

1

それはサブセットがディレクトリ階層にネストされていることを大丈夫だ場合、あなたはスパークの組み込みパーティション使用を検討してください:返信用

df.write.partitionBy("device_type","partner_pos") 
    .json("/path/to/root/output/dir") 
+0

おかげで..私は同じで、タブ区切りファイルとして保存したいですファイル名に.. partner_posとdevice_typeを追加したディレクトリ..このパーティションは、私が読んだことから、この種の柔軟性を許しません。私の製造スパークバージョンは1.6.2です。スパークストリーミングは考慮する必要がありますが、ソースファイルがgzipされていると私はそれが動作する方法はありません – meajmal

関連する問題