web-dev-qa-db-ja.com

Spark 1.4 maxResultSizeメモリを増やす

私は研究のために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の問題であり、これを解決する方法を知っているかどうか疑問に思っている。どんな助けも大歓迎です。

34
ahajib

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)
44
zero323

Pysparkなどのコマンドラインから、--conf spark.driver.maxResultSize=3gは、最大結果サイズを増やすためにも使用できます。

22
Dolan Antenucci

_spark.driver.maxResultSize_のチューニングは、実行中の環境を考慮すると良い習慣です。ただし、データの量は時間とともに変化する可能性があるため、問題の解決策ではありません。 @ Zia-Kayaniが述べたように、賢明にデータを収集する方が良いです。したがって、DataFrame dfがある場合は、_df.rdd_を呼び出して、ドライバーではなくクラスターですべての魔法のことを実行できます。ただし、データを収集する必要がある場合は、次のことをお勧めします。

  • _spark.sql.parquet.binaryAsString_をオンにしないでください。文字列オブジェクトはより多くのスペースを取ります
  • _spark.rdd.compress_を使用して、RDDを収集するときに圧縮します
  • ページネーションを使用して収集してください。 (Scalaのコード、別の回答から Scala:データフレーム内の行の範囲を取得する方法

    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; }

9
Iraj Hedayati

RDDを収集しているように見えるので、ドライバーノードにすべてのデータを確実に収集するため、この問題に直面しています。 rddに不要な場合、または_spark.driver.maxResultSize_を指定する必要がある場合は、データの収集を避ける必要があります。この変数を定義するには2つの方法があります

1-Sparkこの変数を
conf.set("spark.driver.maxResultSize", "3g")
2-または、sparkのconfフォルダーにある_spark-defaults.conf_ファイルでこの変数を設定します。 _spark.driver.maxResultSize 3g_と同様に、スパークを再起動します。

7
Zia Kayani

ジョブまたは端末を開始するときに、次を使用できます。

--conf spark.driver.maxResultSize="0"

ボトルネックを取り除く

2
Mike

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バグに対処します。

2
Tagar

Pysparkシェルを起動するときに、spark.driver.maxResultSizeを2GBに設定できます。

pyspark  --conf "spark.driver.maxResultSize=2g"

これは、spark.driver.maxResultSizeに2Gbを許可するためです

0
korahtm