私はS3からCSVファイルを読み込むことになっている非常に単純なpysparkプログラムがあります:ローカルスパークノードを実行しているときSparkがパーティションをファイルサイズ(バイト単位)に設定するのはなぜですか?
r = sc.textFile('s3a://some-bucket/some-file.csv')
.map(etc... you know the drill...)
これは失敗していたが(それはEMRで動作します)。 OOMエラーやGCのクラッシュが発生しました。さらに調べると、パーティションの数が非常に多くなっていることがわかりました。この特定の場合、r.getNumPartitions()
は2358041
を返します。
私はそれがバイト単位のファイルサイズと同じであることに気付きました。これはもちろん、スパークが悲惨にクラッシュする原因となります。
私はmapred.min.split.size
をchaningのように、異なる構成を試してみた:
conf = SparkConf()
conf.setAppName('iRank {}'.format(datetime.now()))
conf.set("mapred.min.split.size", "536870912")
conf.set("mapred.max.split.size", "536870912")
conf.set("mapreduce.input.fileinputformat.split.minsize", "536870912")
私も無駄に、repartition
を使用して、またはtextFile
にパーティションの引数を渡す変更しようとしました。
私は、ファイルサイズからパーティションの数を派生させるのが良い考えであるとSparkが考えていることを知りたいです。
それは魅力的なように機能しました。ありがとうございました。 – Cristian