1

次のタイプの JavaPairRDD があります。

Tuple2<String, Iterable<Tuple2<String, Iterable<Tuple2<String, String>>>>>

次のオブジェクトを示します:
(Table_name, Iterable (Tuple_ID, Iterable (Column_name, Column_value)))

これは、RDD の各レコードが 1 つの Parquet ファイルを作成することを意味します。

ご想像のとおり、各オブジェクトを Table_name という名前の新しいParquetテーブルとして保存するという考え方です。このテーブルには、値Tuple_IDを格納するIDという 1 つの列があり、各列Column_nameには値Column_valueが格納されます。

私が直面している課題は、テーブルの列 (スキーマ) が実行時にオンザフライで収集されることと、Spark でネストされた RDD を作成できないため、以前の RDD 内で RDD を作成できないことです (もちろん、データフレームに変換した後、最終的にParquetファイルに保存します。

また、明らかな理由 (列/値を取得するために反復する必要がある) から、以前の RDD を DataFrame に変換することはできません。

一時的な回避策として、RDD を使用して RDD と同じ型のリストにフラット化しましたcollect()が、これは適切な方法ではありません。データがドライバー マシンの使用可能なディスク領域よりも大きくなり、メモリ不足が発生する可能性があるためです。

これを達成する方法について何かアドバイスはありますか?質問が十分に明確でない場合はお知らせください。

4

1 に答える 1