我有一个脚本来处理几百 GB 的数据,当我尝试处理超过 500GB 的数据时,我遇到了麻烦,低于这个值,一切都工作正常。 首先调试应用程序时,我收到有关超过 Spark.driver.maxResultSize 值限制的错误,因此我将此值增加到 4g,现在失败的任务正在工作,但是,现在当我尝试时,我遇到了另一个问题将结果保存到 Parquet 文件中,任务失败并抛出此错误
17/01/27 06:35:27 INFO DAGScheduler: Job 7 failed: parquet at NativeMethodAccessorImpl.java:-2, took 12.106390 s
17/01/27 06:35:27 ERROR InsertIntoHadoopFsRelation: Aborting job.
org.apache.spark.SparkException: Job aborted due to stage failure: Serialized task 146:0 was 765207245 bytes, which exceeds max allowed: spark.akka.frameSize (134217728 bytes) - reserved (204800 bytes). Consider increasing spark.akka.frameSize
所以,看来我需要增加spark.akka.frameSize值
我的问题是,我已经使用函数sparkConf().set增加了maxResultSize,但我不知道如何(或语法)增加sparkConf().set中的两个值。
这就是我在这些部分中的代码的样子:
conf = (SparkConf().set("spark.driver.maxResultSize", "4g"))
sc = SparkContext(conf=conf)
sqlContext = HiveContext(sc)
以及失败的任务:
sqlContext.sql(sql).coalesce(5).write.parquet(sys.argv[3], mode='overwrite')
只有一件事,我无法修改spark集群中的conf文件,而且,我们使用luigi将任务提交到spark,所以我无法在执行时修改spark-submit字符串脚本(这就是我直接从脚本修改参数的原因)
任何指导,我们表示赞赏。
最佳答案
RTFM - 直接来自 Spark 1.6.3 Python API documentation ...
class pyspark.SparkConf (...)
All setter methods in this class support chaining.
For example, you can writeconf.setMaster"local").setAppName("My app")
关于python - 使用sparkConf().set设置2个配置值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41888856/