AWS Glue Scala Spark作业配置Spark参数无效,正确方法是什么?
在AWS Glue Scala Spark作业中正确设置Spark配置的方法
你的问题出在手动创建SparkConf并初始化SparkContext的方式不符合Glue的运行机制——Glue会自动管理Spark上下文的初始化,手动创建的配置会被Glue的默认配置覆盖,导致设置不生效。以下是两种可行的解决方案:
方法一:通过Glue作业参数设置(推荐,无需修改代码)
直接在Glue作业的配置界面添加作业参数:
- 键:
--conf - 值:
spark.sql.legacy.parquet.int96RebaseModeInRead=LEGACY(或CORRECTED,根据你的数据来源选择)
这种方式会让Glue在启动Spark上下文时自动加载该配置,完全无需改动代码。
方法二:在代码中基于Glue的上下文修改配置
如果必须在代码中设置,不要手动新建空的SparkConf,而是基于Glue的现有上下文配置修改:
方式A:获取GlueContext的SparkSession后设置
val glueContext: GlueContext = new GlueContext(new SparkContext()) val spark = glueContext.getSparkSession // 设置所需配置 spark.conf.set("spark.sql.legacy.parquet.int96RebaseModeInRead", "LEGACY") val args = GlueArgParser.getResolvedOptions( sysArgs, Seq("JOB_NAME").toArray ) Job.init(args("JOB_NAME"), glueContext, args.asJava)
方式B:继承Glue默认的SparkConf再初始化
// 获取Glue已有的Spark配置(如果上下文已初始化),或创建带默认配置的SparkConf val conf = SparkContext.getOrCreate().getConf conf.set("spark.sql.legacy.parquet.int96RebaseModeInRead", "LEGACY") val spark: SparkContext = new SparkContext(conf) val glueContext: GlueContext = new GlueContext(spark) val args = GlueArgParser.getResolvedOptions( sysArgs, Seq("JOB_NAME").toArray ) Job.init(args("JOB_NAME"), glueContext, args.asJava)
补充说明
- 如果你的Parquet数据是由Spark 2.x或旧版Hive写入的,选择
LEGACY模式;如果数据是基于公历(Proleptic Gregorian)写入的,选择CORRECTED模式。 - Glue 3.0及以上版本对应Spark 3.x,必须设置该参数来处理INT96格式的日期/时间戳兼容性问题。
内容的提问来源于stack exchange,提问作者jamesbascle
相关产品推荐
相关产品推荐

