[英]Spark SQL to Hive table - Datetime Field Hours Bug
我遇到这个问题:当我使用spark.sql数据输入Hive中的时间戳字段时,小时数奇怪地改为21:00:00!
让我解释:
我有一个我用spark.sql读取的csv文件。 我读取文件,将其转换为dataframe并将其存储在Hive表中。 此文件中的一个字段是“3/10/2017”格式的日期。 我希望输入Hive中的字段是Timestamp格式(我使用此数据类型而不是Date的原因是我想使用Impala查询表,而Impala只有Timestamp 数据类型 ,所以它不是一个解决方案只需将数据类型更改为Date)
从文档中可以看出,Hive Timestamp数据类型具有“YYYY-MM-DD HH:MM:SS”格式,因此在我将数据帧输入到Hive表之前,我将日期值转换为适当的格式。
这是我在Python中的代码:
from datetime import datetime
from pyspark.sql.functions import udf
df = spark.read.csv("hdfs:/user/../MyFile.csv", header=True)
#Use a user defined function to convert date format
def DateConvert(x):
x_augm = str(x)+" 00:00:00"
datetime_object = datetime.strptime(x_augm,'%d/%m/%Y %H:%M:%S')
return datetime_object.strftime('%Y-%m-%d %H:%M:%S')
DateConvert_udf = udf(DateConvert)
df= df.withColumn("Trans_Date", DateConvert_udf("Trans_Date"))
这样可以正确格式化时间戳。 我跑的时候
df.select("Trans_Date").show(10, False)
我明白了:
+-------------------+ |Trans_Date | +-------------------+ |2017-10-16 00:00:00| |2017-10-16 00:00:00| |2017-10-16 00:00:00| |2017-10-16 00:00:00| |2017-10-16 00:00:00| |2017-10-16 00:00:00| |2017-10-16 00:00:00| |2017-10-16 00:00:00| |2017-10-16 00:00:00| |2017-10-16 00:00:00| +-------------------+
然后我像这样用Spark SQL将数据导入Hive
df.createOrReplaceTempView('tempTable')
spark.sql("insert into table db.table select * from tempTable")
我的问题是,当我去Hive时,我的Timestamp字段的值如下:
2017-10-16 21:00:00
这是非常奇特的!
提前感谢任何建议
将数据保存到具有TIMESTAMP数据类型的Hive表时,这是常见问题。
将数据保存到Hive表时,TIMESTAMP值表示写入数据的主机的本地时区。
这里2017-10-16 00:00:00 - UTC(默认)转换为2017-10-16 21:00:00 - Hive主机的本地TimeZone。
为了避免意外时区问题产生意外结果,Impala时间戳会在写入数据文件或从数据文件读取时相对于UTC进行存储和解释。
您可以参考以下文档以获取必要的配置设置。 https://www.cloudera.com/documentation/enterprise/5-9-x/topics/impala_timestamp.html#timestamp
通过在Spark中创建时间戳时添加浮点数,我能够解决这个问题。 我只是用HH:MM:SS.ff格式格式化了几个小时,现在Hive表中的时间显示为00:00:00,这就是我想要的。
我的新日期转换例程是:
def DateConvert(x):
x_augm = str(x)+" 00:00:00.0"
datetime_object = datetime.strptime(x_augm,'%d/%m/%Y %H:%M:%S.%f')
return datetime_object.strftime('%Y-%m-%d %H:%M:%S.%f')
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.