pyspark 在同一粘合作业中运行具有不同配置的多个Spark会话

s3fp2yjn  于 2023-03-17  发布在  Spark
关注(0)|答案(1)|浏览(149)

我有一个PySpark代码在Glue作业中运行。该作业使用一个名为“update_mode”的参数。我想根据update_mode是full_overwrite还是upsert为spark设置不同的配置。具体来说,我想在静态和动态之间切换这个spark配置spark.sql.sources.partitionOverwriteMode。我试着创建两个spark会话并使用各自的spark对象,但它没有按预期的方式运行。我能想到的另一个选择是创建两个具有不同配置的独立作业。
在同样的工作中有什么其他的想法吗?

ifmq2ha2

ifmq2ha21#

从来没有使用过Glue,所以不确定你是如何提交你的作业的。但是正如这里所描述的,你可以在CLI上使用--conf spark.sql.sources.partitionOverwriteMode=...来配置每个作业的属性。
在某些情况下,您可能希望避免在SparkConf中硬编码某些配置,例如,Spark允许您简单地创建一个空conf并设置spark/spark hadoop/spark hive属性。

val conf = new SparkConf().set("spark.hadoop.abc.def", "xyz")
val sc = new SparkContext(conf)

此外,您还可以在运行时修改或添加配置:

./bin/spark-submit \
     --name "My app" \ 
     --master local[4] \  
     --conf spark.eventLog.enabled=false \ 
     --conf "spark.executor.extraJavaOptions=-XX:+PrintGCDetails -XX:+PrintGCTimeStamps" \ 
     --conf spark.hadoop.abc.def=xyz \
     --conf spark.hive.abc=xyz
     myApp.jar

或者更动态地从代码as described here中读取。您的代码可以从您选择的任何地方读取它。

相关问题