9

各 RDD パーティションを独自のディレクトリを持つ個別の寄木細工のファイルに書き込みたいステップに苦労しています。例は次のとおりです。

    <root>
        <entity=entity1>
            <year=2015>
                <week=45>
                    data_file.parquet

この形式の利点は、これを SparkSQL で列として直接使用でき、実際のファイルでこのデータを繰り返す必要がないことです。これは、個別のパーティショニング メタデータを別の場所に保存することなく、特定のパーティションに到達するための良い方法です。

前のステップとして、多数の gzip ファイルからすべてのデータをロードし、上記のキーに基づいてパーティション分割しました。

考えられる方法は、各パーティションを個別のRDDとして取得してから書き込むことですが、良い方法は見つかりませんでした。

どんな助けでも大歓迎です。ところで、私はこのスタックに不慣れです。

4

2 に答える 2

49

受け入れられた答えが質問に適切に答えているとは思いません。

次のようなことを試してください:

df.write.partitionBy("year", "month", "day").parquet("/path/to/output")

そして、パーティション化されたディレクトリ構造が得られます。

于 2015-09-29T04:53:18.983 に答える
2

foreachPartition(f: Iterator[T] => Unit)保存したいRDDを呼び出すことで可能だと思います。

に提供した関数でforeachPartition

  1. パスを準備するhdfs://localhost:9000/parquet_data/year=x/week=y
  2. 寄木細工ライター
  3. 各行を recordWriter に挿入して Iterator を使い果たします。
  4. 掃除
于 2015-05-20T01:04:03.710 に答える