pyspark 未知的日期数据类型(Spark、 parquet )[13个字符长]

mspsb9vt  于 2022-12-17  发布在  Spark
关注(0)|答案(1)|浏览(129)

我有一个 parquet 文件,其中日期列填充了我遇到问题的数据类型

我明白Hive和 Impala 倾向于重新确定它们的时间戳...然而,我似乎无法转换或找到任何关于如何解决这个问题的指针。
我已尝试将int96RebaseModeInRead和datetimeRebaseModeInRead模式设置为旧模式
我还尝试在读取操作上应用日期模式,但没有效果。

这是应用了方案的情况

到目前为止,我已经阅读了这些文档。也许有一个简单的解决方案我没有看到。让我们假设我没有办法问创建源文件的人他们到底做了什么。
https://spark.apache.org/docs/latest/sql-data-sources-parquet.html#data-source-option
https://kontext.tech/article/1062/spark-2x-to-3x-date-timestamp-and-int96-rebase-modes
https://docs.cloudera.com/runtime/7.2.1/developing-spark-applications/topics/spark-timestamp-compatibility-parquet.html
另外,这个线程是我唯一能找到的显示时间戳是如何创建的,但没有显示如何反转它的线程。请给予我一些提示。parquet int96 timestamp conversion to datetime/date via python

gajydyqb

gajydyqb1#

据我所知,您试图将order_date列转换为dateType。如果是这种情况,下面的代码可能会有所帮助。您可以从源文件中读取order_date列作为stringType,并且应该使用您自己的时区作为from_utc_timestamp方法。

from pyspark.sql.functions import from_utc_timestamp
from pyspark.sql.types import StringType

d = ['1374710400000']
df = spark.createDataFrame(d, StringType())
df.show()

df = df.withColumn('new_date',from_utc_timestamp(from_unixtime(df.value/1000,"yyyy-MM-dd hh:mm:ss"),'GMT+1')).show()

输出:

+-------------+
|        value|
+-------------+
|1374710400000|
+-------------+

+-------------+-------------------+
|        value|         new_date|
+-------------+-------------------+
|1374710400000|2013-07-25 13:00:00|
+-------------+-------------------+

相关问题