蜂巢时间戳不接受 Spark 时间戳类型
Posted
技术标签:
【中文标题】蜂巢时间戳不接受 Spark 时间戳类型【英文标题】:Spark timestamp type is not getting accepted with hive timestamp 【发布时间】:2018-03-28 17:51:06 【问题描述】:我有一个火花数据框,其中包含一个字段作为时间戳。我将数据帧存储到创建 hive 外部表的 HDFS 位置。 Hive 表包含时间戳类型的字段。但是,从外部位置 hive 读取数据时,会将时间戳字段填充为表中的空白值。 我的火花数据框查询:
df.select($"ipAddress", $"clientIdentd", $"userId", to_timestamp(unix_timestamp($"dateTime", "dd/MMM/yyyy:HH:mm:ss Z").cast("timestamp")).as("dateTime"), $"method", $"endpoint", $"protocol", $"responseCode", $"contentSize", $"referrerURL", $"browserInfo")
Hive 创建表语句:
CREATE EXTERNAL TABLE `finalweblogs3`(
`ipAddress` string,
`clientIdentd` string,
`userId` string,
`dateTime` timestamp,
`method` string,
`endpoint` string,
`protocol` string,
`responseCode` string,
`contentSize` string,
`referrerURL` string,
`browserInfo` string)
ROW FORMAT SERDE
'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe'
WITH SERDEPROPERTIES (
'field.delim'=',',
'serialization.format'=',')
STORED AS INPUTFORMAT
'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
'hdfs://localhost:9000/streaming/spark/finalweblogs3'
我不明白为什么会这样。
【问题讨论】:
尝试删除 unix_timestamp 部分:to_timestamp($"dateTime", "dd/MMM/yyyy:HH:mm:ss Z").cast("timestamp").as("dateTime" ) 我还能知道原始时间戳是什么样子的吗? hive 只采用时间戳格式为 yyyy-mm-dd hh:mm:ss[.f...] 25/Oct/2011:01:41:00 -0500 这就是时间戳的样子。 你试过我在第一条评论中建议的那个吗? 是的,我已经尝试过,但在 Hive 中,它仍然被填充为空白值。 【参考方案1】:我通过将存储格式更改为“Parquet”来解决它。 我仍然不知道为什么它不适用于 CSV 格式。
【讨论】:
以上是关于蜂巢时间戳不接受 Spark 时间戳类型的主要内容,如果未能解决你的问题,请参考以下文章