私は研究のためにSpark 1.4を使用しており、メモリ設定に苦労しています。私のマシンには16GBのメモリがあるので、ファイルのサイズは300MBしかないので問題はありません。 convert Spark RDD to panda dataframe to toPandas()
functionを使用すると、次のエラーが表示されます。
serialized results of 9 tasks (1096.9 MB) is bigger than spark.driver.maxResultSize (1024.0 MB)
これを修正して、spark-configファイルを変更しても、同じエラーが発生します。これはspark 1.4の問題であり、これを解決する方法を知っているかどうか疑問に思っている。どんな助けも大歓迎です。
SparkConf
オブジェクトにspark.driver.maxResultSize
パラメーターを設定できます。
from pyspark import SparkConf, SparkContext
# In Jupyter you have to stop the current context first
sc.stop()
# Create new config
conf = (SparkConf()
.set("spark.driver.maxResultSize", "2g"))
# Create new context
sc = SparkContext(conf=conf)
おそらく新しいSQLContext
も作成する必要があります。
from pyspark.sql import SQLContext
sqlContext = SQLContext(sc)
Pysparkなどのコマンドラインから、--conf spark.driver.maxResultSize=3g
は、最大結果サイズを増やすためにも使用できます。
_spark.driver.maxResultSize
_のチューニングは、実行中の環境を考慮すると良い習慣です。ただし、データの量は時間とともに変化する可能性があるため、問題の解決策ではありません。 @ Zia-Kayaniが述べたように、賢明にデータを収集する方が良いです。したがって、DataFrame df
がある場合は、_df.rdd
_を呼び出して、ドライバーではなくクラスターですべての魔法のことを実行できます。ただし、データを収集する必要がある場合は、次のことをお勧めします。
spark.sql.parquet.binaryAsString
_をオンにしないでください。文字列オブジェクトはより多くのスペースを取りますspark.rdd.compress
_を使用して、RDDを収集するときに圧縮します
long count = df.count() int limit = 50; while(count > 0){ df1 = df.limit(limit); df1.show(); //will print 50, next 50, etc rows df = df.except(df1); count = count - limit; }
RDDを収集しているように見えるので、ドライバーノードにすべてのデータを確実に収集するため、この問題に直面しています。 rddに不要な場合、または_spark.driver.maxResultSize
_を指定する必要がある場合は、データの収集を避ける必要があります。この変数を定義するには2つの方法があります
1-Sparkこの変数を
conf.set("spark.driver.maxResultSize", "3g")
2-または、sparkのconfフォルダーにある_spark-defaults.conf
_ファイルでこの変数を設定します。 _spark.driver.maxResultSize 3g
_と同様に、スパークを再起動します。
ジョブまたは端末を開始するときに、次を使用できます。
--conf spark.driver.maxResultSize="0"
ボトルネックを取り除く
Sparkバグもあります https://issues.Apache.org/jira/browse/SPARK-12837 同じエラーが発生します
serialized results of X tasks (Y MB) is bigger than spark.driver.maxResultSize
明示的にドライバーにデータをプルしていない場合でも。
SPARK-12837は、Spark 2より前のアキュムレータ/ブロードキャスト変数がこの問題を引き起こす不要なドライバにプルされたSparkバグに対処します。
Pysparkシェルを起動するときに、spark.driver.maxResultSizeを2GBに設定できます。
pyspark --conf "spark.driver.maxResultSize=2g"
これは、spark.driver.maxResultSizeに2Gbを許可するためです