48

私は研究に Spark 1.4 を使用しており、メモリ設定に苦労しています。私のマシンには 16GB のメモリがあり、ファイルのサイズが 300MB しかないので問題ありません。ただし、関数を使用して Spark RDD を panda データフレームに変換しようとするとtoPandas()、次のエラーが表示されます。

serialized results of 9 tasks (1096.9 MB) is bigger than spark.driver.maxResultSize (1024.0 MB)

spark-config ファイルを変更してこれを修正しようとしましたが、それでも同じエラーが発生します。これは spark 1.4 の問題だと聞きましたが、これを解決する方法を知っているかどうか疑問に思っています。どんな助けでも大歓迎です。

4

7 に答える 7

55

spark.driver.maxResultSizeオブジェクトにパラメータを設定できSparkConfます:

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)
于 2015-06-25T19:01:57.023 に答える
28

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

于 2016-03-25T22:17:11.167 に答える
12

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

  • オンにしないでくださいspark.sql.parquet.binaryAsString。文字列オブジェクトはより多くのスペースを必要とします
  • spark.rdd.compress収集時にRDDを圧縮するために使用します
  • ページネーションを使用して収集してみてください。(Scala のコード、別の回答Scala: How to get range of rows in a dataframe から)

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

于 2016-10-26T16:01:58.933 に答える