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 文档在哪里?