クラスタにSpark 1.3とHiveがあります ランダムに選択した行を追加する必要がある大きなHiveテーブルがあります。 条件を満たしていれば、読み込んだ小さなテーブルがあります。条件が満たされていれば、入力するランダムな行を照会するために必要な変数を取得します。私がしたことは、その条件の問い合わせをtable.where(value<number)
とし、それをtake(num rows)
を使って配列にすることでした。そして、これらの行には、大型のハイブテーブルからランダムな行が必要な情報が含まれているため、配列を繰り返し処理します。HiveテーブルにScala + Spark 1.3をインクリメントして追加します。
クエリを実行すると、クエリにORDER BY RAND()
(sqlContext
を使用)が使用されます。大きなテーブルから列を追加すると、var Hive table
(変更可能)が作成されました。ループでは、私はunionAllを行うnewHiveTable = newHiveTable.unionAll(random_rows)
私はこれを行うにはさまざまな方法を試しましたが、CPUと一時ディスクの使用を避ける最良の方法は何か分かりません。データフレームはインクリメンタルな追加を意図したものではないことを私は知っています。 私が今試したがっていることの1つは、cvsファイルを作成し、そのファイルにランダムな行を徐々に書き込み、ループが終了したらcvsファイルをテーブルとしてロードし、unionAllを実行してファイナルテーブル。
フィードバックは素晴らしいです。ハイブ内
:
create external table test(key string, value string)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ';'
LOCATION '/SOME/HDFS/LOCATION'
そして感謝
は
あなたは最近のスパークバージョンに移行する選択肢を持っているのですか? 'yourDataFrame.writer()。mode(SaveMode.Append).saveAsTable(" YourTableName "' – user1314742
Spark 1.5へのアップグレードまで翌月になることはありません – KBA