noo*_*php 13 apache-spark apache-spark-sql pyspark spark3
我正在尝试使用解析日期,to_date()
但出现以下异常。
SparkUpgradeException: 由于 Spark 3.0 升级,您可能会得到不同的结果:Fail to parse '12/1/2010 8:26' in the new parser。您可以将 spark.sql.legacy.timeParserPolicy 设置为 LEGACY 以恢复 Spark 3.0 之前的行为,或者设置为 CORRECTED 并将其视为无效的日期时间字符串。
例外情况表明我应该使用旧版时间解析器,首先我不知道如何将其设置为旧版。
这是我的实现
dfWithDate = df.withColumn("date", to_date(col("InvoiceDate"), "MM/dd/yyyy"))
Run Code Online (Sandbox Code Playgroud)
我的日期采用以下格式
+--------------+
| InvoiceDate|
+--------------+
|12/1/2010 8:26|
|12/1/2010 8:26|
|12/1/2010 8:26|
|12/1/2010 8:26|
|12/1/2010 8:26|
Run Code Online (Sandbox Code Playgroud)
sur*_*iva 18
spark.sql("set spark.sql.legacy.timeParserPolicy=LEGACY")
df.withColumn("date", to_date(col("InvoiceDate"), "MM/dd/yyyy")).show()
+--------------+----------+
| InvoiceDate| date|
+--------------+----------+
|12/1/2010 8:26|2010-12-01|
+--------------+----------+
# in above code spark refers SparkSession
Run Code Online (Sandbox Code Playgroud)
bla*_*hop 12
您可以继续使用 Spark 3 的新实现,首先将字符串解析为时间戳,然后转换为日期:
from pyspark.sql import functions as F
dfWithDate = df.withColumn("date", F.to_date(F.to_timestamp(col("InvoiceDate"), "M/d/yyyy H:mm")))
dfWithDate.show()
#+--------------+----------+
#| InvoiceDate| date|
#+--------------+----------+
#| 2/1/2010 8:26|2010-02-01|
#| 2/1/2010 8:26|2010-02-01|
#| 2/1/2010 8:26|2010-02-01|
#| 2/1/2010 8:26|2010-02-01|
#|12/1/2010 8:26|2010-12-01|
#+--------------+----------+
Run Code Online (Sandbox Code Playgroud)
如果您想继续使用 Spark 3.0 版本(不使用旧版本的时间转换),您可以只使用d
in的一位数字"MM/d/yyyy"
:
dfWithDate = df.withColumn("date", to_date(col("InvoiceDate"), "MM/d/yyyy"))
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
8907 次 |
最近记录: |