哈希 md5:Pyspark shell 和 spark-submit 在时间戳列上不提供相同的输出

Hash md5: Pyspark shell and spark-submit don't give the same output on timestamp column

在 PySpark 中,我使用 md5 函数对数据帧的一些列进行哈希处理。
数据帧是从配置单元 table 中读取的。我已将所有列转换为字符串类型,并确保在 运行 使用 md5 哈希之前值是正确的。

from pyspark.sql.functions import md5
df_hive = spark.sql("select * from db.table1 where day=1")
df_hive  = df_hive.select([sqlf.col(c).cast("string") for c in df_hive.columns])
dfha = df_hive.withColumn("hash_col",md5("timestamp_col"))
dfha.write.format("csv").save("path")

当我 运行 通过 spark-submit 处理时,哈希在 pyspark shell 中给出与在 Databricks 中相同的结果,但在时间戳列上的值不同。
感谢您的帮助。

我知道这个问题很老了。我只是有一个类似的问题笔记本(手动执行与在管道中执行),其中一个设置了时区,另一个设置了默认值。因此Bentech在评论中的暗示可能是正确的。

对我来说,在 spark.conf.set("spark.sql.session.timeZone", "Your Timezone") 的帮助下同步时区解决了这个问题。

问题是我的 sparkSession 变量在 Databricks 上使用了与 spark-submit 环境不同的时区。 在脚本中强制 spark 会话变量中的时区解决了这个问题。

spark = (pyspark
     .sql
     .SparkSession
     .builder
     .config("spark.sql.session.timeZone", "Your Timezone")
     .getOrCreate()
    )

或者在创建你的 spark session 变量后,你可以使用 @Luca

提到的方法