【问题标题】:Pyspark - Glue 3.0 issue, upgrading of Spark 3.0 : reading dates before 1582-10-15 or timestamps before 1900-01-01T00:00:00ZPyspark - Glue 3.0 问题,Spark 3.0 升级:读取 1582-10-15 之前的日期或 1900-01-01T00:00:00Z 之前的时间戳
【发布时间】:2022-06-15 22:38:14
【问题描述】:

升级到Glue 3.0后处理rdd对象时出现以下错误

调用 o926.javaToPython 时出错。你可能会得到一个 由于 Spark 3.0 的升级导致不同的结果:读取日期 1582-10-15 之前或 1900-01-01T00:00:00Z 之前的时间戳 Parquet 文件可能不明确,因为文件可能由 Spark 编写 2.x 或 Hive 的旧版本,它使用不同于 Spark 3.0+ 的 Proleptic Gregorian 日历的旧混合日历。看 SPARK-31404 中的更多详细信息。你可以设置 spark.sql.legacy.parquet.datetimeRebaseModeInRead 到 'LEGACY' 到 重新设置日期时间值 w.r.t.期间的日历差异 阅读。或将 spark.sql.legacy.parquet.datetimeRebaseModeInRead 设置为 'CORRECTED' 按原样读取日期时间值。

我已经添加了doc中提到的配置

--conf spark.sql.legacy.parquet.int96RebaseModeInRead=CORRECTED --conf spark.sql.legacy.parquet.int96RebaseModeInWrite=CORRECTED --conf spark.sql.legacy.parquet.datetimeRebaseModeInRead=CORRECTED

这确实是一个阻止运行 Glue 作业的阻塞问题!

注意:我在本地使用pyspark3.1.2,对于相同的数据,它可以正常工作

【问题讨论】:

    标签: pyspark aws-glue aws-glue3.0


    【解决方案1】:

    我是这样解决的。以下默认:

    sc = SparkContext()
    glueContext = GlueContext(sc)
    spark = glueContext.spark_session
    job = Job(glueContext)
    job.init(args['JOB_NAME'], args)
    

    添加额外的火花配置

    conf = sc.getConf()
    conf.set("spark.sql.legacy.parquet.int96RebaseModeInRead", "CORRECTED")
    conf.set("spark.sql.legacy.parquet.int96RebaseModeInWrite", "CORRECTED")
    conf.set("spark.sql.legacy.parquet.datetimeRebaseModeInRead", "CORRECTED")
    conf.set("spark.sql.legacy.parquet.datetimeRebaseModeInWrite", "CORRECTED")
    sc.stop()
    sc = SparkContext.getOrCreate(conf=conf)
    glueContext = GlueContext(sc)
    

    ...你的代码

    【讨论】:

      猜你喜欢
      • 2022-01-24
      • 2021-10-23
      • 1970-01-01
      • 2022-07-25
      • 1970-01-01
      • 2014-06-20
      • 1970-01-01
      • 2017-02-19
      • 1970-01-01
      相关资源
      最近更新 更多