私たちのクラスターには Spark 1.3 と Hive があり、ランダムに選択された行を追加する必要がある大きな Hive テーブルがあります。条件を読み取ってチェックする小さなテーブルがあり、その条件が真の場合は、必要な変数を取得してから、ランダムな行を埋めるためにクエリを実行します。私がしたことは、その条件でクエリを実行し、table.where(value<number)
を使用して配列にしtake(num rows)
ました。次に、これらすべての行には、大規模なハイブ テーブルから必要なランダムな行に関する必要な情報が含まれているため、配列を反復処理します。
クエリで使用するクエリを実行するときORDER BY RAND()
(を使用sqlContext
)。var Hive table
大きなテーブルから列を追加して(変更可能にする)を作成しました。ループでは、unionAll を実行しますnewHiveTable = newHiveTable.unionAll(random_rows)
これを行うためにさまざまな方法を試しましたが、CPU と一時ディスクの使用を避けるための最善の方法がわかりません。データフレームは増分追加を目的としていないことを知っています。私が今試みなければならないことの1つは、cvsファイルを作成し、そのファイルにランダムな行をループでインクリメンタルに書き込み、ループが終了したら、cvsファイルをテーブルとしてロードし、1つのunionAllを実行して最終的な結果を取得することですテーブル。
どんなフィードバックも素晴らしいでしょう。ありがとう