pyspark 如何在Spark 3.0中解析时间戳而不会出现解析器时间错误

v9tzhpje  于 12个月前  发布在  Spark
关注(0)|答案(1)|浏览(111)

我有一个包含时间戳值的列:
| ts值|
| --|
| 1682121600 |
| 1693180800 |
ts_values列是LongType()数据类型。
当我试着运行这段代码时

max_ts = df.select(F.max(col("ts_values")).collect()[0][0]

我得到了错误

An error occurred while calling o472.showString. Text '2023-04-22 00:00:00' could not be parsed, unparsed text found at index 10

我知道如果设置spark配置**spark.conf.set(“spark.sql.legacy.timeParserPolicy”,“LEGACY”)**它将工作,但我想了解如何在代码中以正确的方式获得它。此代码在Spark 2.4.6中运行
你知道该怎么做吗?
谢谢

8i9zcol2

8i9zcol21#

首先转换ts_values,然后使用collect获取max Date。
函数from_unixtime的时间戳转换可以在df的列中执行
代码输入:-

from pyspark.sql import SparkSession
from pyspark.sql.functions import col, max, from_unixtime

spark = SparkSession.builder.appName("TimestampHandling").getOrCreate()

data = [
    [1682121600],
    [1693180800]
]

columns = ["ts_values"]
df = spark.createDataFrame(data, columns)
df.show()

max_ts=df.withColumn(
    "date", from_unixtime("ts_values"))

max_ts.show()

print("then use collect()")
max_ts = max_ts.select(max(col("date"))).collect()[0][0]
print(max_ts)

输出:-

+----------+
| ts_values|
+----------+
|1682121600|
|1693180800|
+----------+

+----------+-------------------+
| ts_values|               date|
+----------+-------------------+
|1682121600|2023-04-22 00:00:00|
|1693180800|2023-08-28 00:00:00|
+----------+-------------------+

then use collect()
2023-08-28 00:00:00

相关问题