Spark 2.2では、文字列の空の文字列値をlit(null)に置き換えた後、永続化されたDataFrameサイズに大きな影響を与えることがわかりました。空の文字列をnullに置き換えると、データフレームサイズが増えますか?
これは私が空の文字列値を置き換えるために使用する機能です。
def nullifyEmptyStrings(df:DataFrame): DataFrame = {
var in = df
for (e <- df.columns) {
in = in.withColumn(e, when(length(col(e))===0, lit(null:String)).otherwise(col(e)))
}
in
}
私は、この関数を実行する前に、私の最初のデータフレームの持続(DISK_ONLY)サイズは1480メガバイトで、その後1610メガバイトであることを確認します。パーティションの数は変更されません。
どのような考えですか? nullingはうまく動作しますが、これを導入する主な理由は、シャッフルサイズを小さくすることでした。この方法でしか増加しないようです。
null値で外部ファイル(CSVなど)に保存してSparkに再ロードできますか?私はあなたがデータフレームを作成するときに列の内部エンコーディングを最適化するSparkから来ていると思います。 – Fabich
はい、私は実験として試してみましょう - しかし、それは生産現場で私のためにはうまくいかないので、助けになるならこれを達成するためのプログラム的な方法があることを願っています – Chondrops
フォローアップ私の終わり:CSVとしての永続化とSparkへの再読み込みは、DataFrameの永続化されたサイズにまったく影響しません。空の文字列よりもまだ大きいです。 Hiveテーブル(寄木張り)に書き込んでリロードしても同じことを試しましたが、それでも効果はありません。 – Chondrops