哈希 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
提到的方法
在 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
提到的方法