Pyspark附加执行程序环境变量

时间:2016-11-25 15:19:11

标签: apache-spark pyspark pythonpath

是否可以在spark中将值附加到worker的PYTHONPATH?

我知道可以去每个工作节点,配置spark-env.sh文件并执行它,但我想要一种更灵活的方法

我正在尝试使用setExecutorEnv方法,但没有成功

conf = SparkConf().setMaster("spark://192.168.10.11:7077")\
              .setAppName(''myname')\
              .set("spark.cassandra.connection.host", "192.168.10.11") /
              .setExecutorEnv('PYTHONPATH', '$PYTHONPATH:/custom_dir_that_I_want_to_append/')

它在每个执行器上创建一个pythonpath env.variable,强制它为lower_case,并且不解释$ PYTHONPATH命令以追加该值。

我最终得到了两个不同的env.variables,

pythonpath  :  $PYTHONPATH:/custom_dir_that_I_want_to_append
PYTHONPATH  :  /old/path/to_python

第一个是动态创建的,第二个已经存在过。

有谁知道怎么做?

1 个答案:

答案 0 :(得分:6)

我想出了自己......

问题不在于spark,而在于ConfigParser

基于this answer,我修复了ConfigParser以始终保留大小写。

在此之后,我发现默认的spark行为是将值附加到现有的worker env.variables,如果有一个具有相同名称的env.variable。

因此,没有必要在美元符号内提及$ PYTHONPATH。

paramanswer