Pyspark:保存到 Cassandra 时的日期不正确

Pyspark: Incorrect date when save into Cassandra

我是 Spark 和 Cassandra 的新手。我准备了一个数据框并将其保存到 Cassandra 中。 Pyspark 和 Cassandra 之间的日期不一致。

Pyspark 显示“2020-10-04”。 Cassandra 显示 '2020-10-03 16:00:00.000000+0000'.

知道如何解决吗?

在 Pyspark 中,

>>> df_check.show()
+-----------+-----+
|access_date|count|
+-----------+-----+
| 2020-10-04|  120|
+-----------+-----+

>>> df_check.printSchema()
root
 |-- access_date: date (nullable = true)
 |-- count: long (nullable = false)

在卡桑德拉中,

cqlsh:test> select * from test2;

 access_date                     | count
---------------------------------+-------
 2020-10-03 16:00:00.000000+0000 |   120


cqlsh:test> desc test2;

CREATE TABLE test.test2 (
    access_date timestamp PRIMARY KEY,
    count int
)

Cassandra 以 UTC 格式存储时间戳,在您的情况下,您正在将 Spark 在您当地时区 (UTC+8) 中显示 date/timestamp 的日期转换为 UTC。您可以尝试通过将 spark.sql.session.timeZone 设置为 UTC 来解决此问题,这样 Spark 将使用该时区的日期,但这可能会更改您的数据,尤其是当您使用 current_date/[= 等函数时12=].

P.S。您可以在 following blog post.

中阅读有关在 Spark 中处理 date/timestamp 的更多信息