[英]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.