答案 0 :(得分:43)
答案 1 :(得分:21)
从命令行,例如使用pyspark,--conf spark.driver.maxResultSize=3g
也可用于增加最大结果大小。
答案 2 :(得分:9)
考虑到运行环境,调整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; }
答案 3 :(得分:7)
答案 4 :(得分:2)
还有一个Spark bug https://issues.apache.org/jira/browse/SPARK-12837 这给出了同样的错误
serialized results of X tasks (Y MB) is bigger than spark.driver.maxResultSize
即使您可能没有明确地将数据提取到驱动程序。
SPARK-12837解决了一个Spark错误,即Spark 2之前的累加器/广播变量被拉到驱动程序不必要导致此问题。
答案 5 :(得分:2)
启动作业或终端时,您可以使用
--conf spark.driver.maxResultSize="0"
消除瓶颈
答案 6 :(得分:0)
启动pyspark shell时,可以将spark.driver.maxResultSize设置为2GB:
pyspark --conf "spark.driver.maxResultSize=2g"
这是为了允许将2Gb用于spark.driver.maxResultSize