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 小时)的主要内容,如果未能解决你的问题,请参考以下文章

具有 HiveContext 的多个 Spark 应用程序

Spark Window Functions 需要 HiveContext?

在 spark 1.6 中计数(不同)不能与 hivecontext 查询一起使用

Spark with HiveContext - AnalysisException:无法解析窗口函数“first_value”

在 Spark CLI 中初始化 HiveContext

Apache Spark SQLContext 与 HiveContext 有啥区别?