1
私はスパークSQLの小さなファイルの問題を上記のアプローチを使用して解決しようとしています、私の組織のユーザは、例えばSQL文を渡します。私は、スパークのSQL問題に上記のSQLを実行することができます別のselect句とSQL文の挿入句
insert overwrite table x partition (column1) select * from y;
はスパークSQLでは動作しません(真=小さなファイルをマージ)オプションなどを...持っているハイブと比較すると、それは小さなファイルを作成しています。
私は、ユーザーのSQLステートメントを取ってselect句とinsert句を2つの部分に分けて、select節からDataframeを最初に作成し、サイズを見積り、出力ファイルを計算し、以下のターゲット表に挿入するような作業を思いついた。例。
val df=sqlContext.sql(select * from y)
val size=SizeEstimator.estimate(df)
val outputFiles=size/256000
df.coleasce(outputFiles).wirte.mode.Append("x partition (column1)")
sql文字列からselect句とinsert句を区切ることができるJava/Scalaには正規表現関数またはライブラリがありますか?最初のキャプチャグループはINSERT
文が含まれています2つ目はSELECT
の文が入ります
(.+?) (?=select)(.+)
:
おかげ