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 的更多信息
我是 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 的更多信息