Spark - HiveContext |错误的时间戳(减去 4 小时)
Posted
技术标签:
【中文标题】Spark - HiveContext |错误的时间戳(减去 4 小时)【英文标题】:Spark - HiveContext | Wrong Timestamps (substracts 4 hours) 【发布时间】:2016-06-05 09:53:25 【问题描述】:我尝试使用 SparkSQL (HiveContext) 进行一些 ETL,但我注意到时间戳存在一些不一致。
假设我们有一个存储为 parquet 的表,其中包含两列:时间戳、事件。 如果我使用 Hue 中的 Hive 编辑器查询此表,则一切正常。
SELECT * FROM mytable ORDER BY timestamp
使用 hiveContext.sql(query) 执行完全相同的查询将得到与 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】:当 Hive 将时间戳值存储为 Parquet 格式时,它将本地时间转换为 UTC 时间,当它读出数据时,它又转换回本地时间。看起来您的当地时间是东部时间,因此有 4 小时的差异。使用 Hive 和 Parque 组合,您可能需要根据所需的时区修改时间更改。我不太确定,Hue 如何同时返回。
【讨论】:
以上是关于Spark - HiveContext |错误的时间戳(减去 4 小时)的主要内容,如果未能解决你的问题,请参考以下文章
Spark Window Functions 需要 HiveContext?
在 spark 1.6 中计数(不同)不能与 hivecontext 查询一起使用
Spark with HiveContext - AnalysisException:无法解析窗口函数“first_value”