使用sparkConf()。set设置2个配置值

时间:2017-01-27 07:28:11

标签: python apache-spark pyspark

我有一个处理几百GB数据的脚本,当我尝试处理500gb以上时,我遇到了麻烦,低于这一切,它的工作正常。 首先调试应用程序我得到了关于超过spark.driver.maxResultSize值限制的错误,所以我将此值增加到4g并且现在失败的任务正在运行,但是,现在我有另一个问题,当我尝试要将结果保存到镶木地板文件中,任务失败并抛出此错误

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字符串脚本的执行(这就是我直接从脚本修改参数的原因)

感谢任何指导。

1 个答案:

答案 0 :(得分:1)

RTFM - 直接来自Spark 1.6.3 Python API documentation ...

  

class pyspark。 SparkConf (...)

  此类中的所有setter方法都支持链接
For   例如,您可以编写conf.setMaster"local").setAppName("My app")