SPARK SQL 和 Cassandra 之间的时区不匹配

Posted

技术标签:

【中文标题】SPARK SQL 和 Cassandra 之间的时区不匹配【英文标题】:Timezone mismatch between SPARK SQL and Cassandra 【发布时间】:2018-01-24 21:41:39 【问题描述】:

我正在尝试将数据从 Cassandra 加载到 Spark DataFrame,但时间戳列值正在转换为 UTC 时区而不是 EDT

我正在寻找在这两种情况下时区都应为 EDT 的解决方案。

例如:

Cassandra 时间戳:- 16-08-2017 00:00:00(EDT 时区)

查询 spark sql dataframe/tempview 后获得时间戳:- 15-08-2017 20:00:00(4 小时变化,时区为 UTC)

我搜索了很多,发现转换将基于本地时间戳完成,但即使在更改本地时间戳之后,我仍然看到在 SPARK SQL 中修改时区

仅供参考:

卡桑德拉时区:美国东部时间 正在运行 spark 作业的本地时区:EDT

【问题讨论】:

Cassandra 使用 UTC 时间存储在时间戳列中。如果您需要输出中的特定时区实例,则必须将 UTC 转换为所需的时区。您可以通过生成的数据框列来做到这一点。 【参考方案1】:

Cassandra 默认使用 UTC 时区,但在 cqlshrc 中指定的时区只会在将其显示到控制台时进行更改/类型转换。

在我的情况下,我已将本地时区从 EDT 修改为 UTC 以完成工作,但按照规定,它也可以被设置为所需的时间。

感谢@Uttam Kasundara 触发了完美的点。

【讨论】:

以上是关于SPARK SQL 和 Cassandra 之间的时区不匹配的主要内容,如果未能解决你的问题,请参考以下文章

使用 JDBC(例如 Squirrel SQL)用 Spark SQL 查询 Cassandra

将 Spark SQL Hive 服务器连接到 Cassandra?

Spark 1.3.x 的 org.apache.spark.sql.cassandra 的 API 文档在哪里?

无法导入 org.apache.spark.sql.cassandra.CassandraSQLContext

spark如何在cassandra表之间复制数据?

使用 Spark SQL 在 cassandra 中加入两个表 - 错误:缺少 EOF