【发布时间】:2019-02-19 07:18:13
【问题描述】:
我需要在 parquet 中写入时间戳,然后使用 Hive 和 Impala 读取它。
为了写,我试过eg
my.select(
...,
unix_timestamp() as "myts"
.write
.parquet(dir)
然后阅读我在 Hive 中创建了一个外部表:
CREATE EXTERNAL TABLE IF NOT EXISTS mytable (
...
myts TIMESTAMP
)
这样做,我得到了错误
HiveException: java.lang.ClassCastException: org.apache.hadoop.io.LongWritable cannot be cast to org.apache.hadoop.hive.serde2.io.TimestampWritable
我还尝试将 unix_timestamp() 替换为
to_utc_timestamp(lit("2018-05-06 20:30:00"), "UTC")
同样的问题。在 Impala 中,它返回给我:
Column type: TIMESTAMP, Parquet schema: optional int64
而时间戳应该是 int96。 将时间戳写入镶木地板的正确方法是什么?
【问题讨论】:
-
我发现了一个相关问题:jira.pentaho.com/browse/PDI-17275寻找解决方法
-
您可以先创建表,然后使用 SparkSQL INSERT 到该表中,自动管理兼容性问题...无意冒犯,但我相信 Spark 代码库会比你仓促的“解决方法”做得更好。
标签: apache-spark hive timestamp impala