Spark - HiveContext |错误的时间戳(减去4小时)

时间:2016-06-05 09:53:25

标签: apache-spark hive timestamp hiveql

我试图使用SparkSQL(HiveContext)做一些ETL,我注意到时间戳有些不一致。

假设我们有一个存储为镶木地板的表格,有两列:时间戳,事件。 如果我使用Hue的Hive编辑器查询此表,一切正常。

SELECT * FROM mytable ORDER BY timestamp

使用hiveContext.sql(查询)执行完全相同的查询将得到与Hue一样的结果,但是(时间戳 - 4小时)。

另一个例子,假设我们有这个表:

Timestamp                   | event
--------------------------------------------------
'year-month-day 00:00:00'   | "evt0"
'year-month-day 01:00:00'   | "evt1"
'year-month-day 02:00:00'   | "evt2"
'year-month-day 03:00:00'   | "evt3"
'year-month-day 04:00:00'   | "evt4"
'year-month-day 05:00:00'   | "evt5"
'year-month-day 06:00:00'   | "evt6"
'year-month-day 07:00:00'   | "evt7"
'year-month-day 08:00:00'   | "evt8"

我们使用Spark和HiveContext运行以下查询:

SELECT * FROM mytable 
WHERE timestamp BETWEEN 'year-month-day 00:00:00' AND 'year-month-day 08:00:00'
ORDER BY timestamp

结果:

Timestamp                   | event
--------------------------------------------------
'year-month-day 00:00:00'   | "evt4"
'year-month-day 01:00:00'   | "evt5"
'year-month-day 02:00:00'   | "evt6"
'year-month-day 03:00:00'   | "evt7"
'year-month-day 04:00:00'   | "evt8"

1 个答案:

答案 0 :(得分:2)

当Hive将时间戳值存储为Parquet格式时,它会将本地时间转换为UTC时间,当它读取数据时,它会转换回本地时间。看起来你当地的时间是ET,因此4小时的差异。使用Hive和Parque组合,您可能需要根据所需的时区修改时间更改。我不太确定,Hue如何回归同一时间。