将 PySpark 字符串转换为日期格式
您有一个 PySpark DataFrame,其中的字符串列表示 MM-dd-yyyy 格式的日期。您尝试使用 to_date 函数将此列转换为日期格式会返回空值。本文提供了解决此问题的方法。
更新的建议(Spark 2.2):
对于 Spark 2.2 及更高版本,首选方法是使用 to_date 或to_timestamp 函数,现在支持格式参数。这允许您指定输入格式并将字符串列直接转换为日期或时间戳:
from pyspark.sql.functions import to_timestamp df = spark.createDataFrame([('1997-02-28 10:30:00',)], ['t']) df.select(to_timestamp(df.t, 'yyyy-MM-dd HH:mm:ss').alias('dt')).collect() # Output: # [Row(dt=datetime.datetime(1997, 2, 28, 10, 30))]
原始答案(Spark
对于早期的 Spark 版本,可以使用以下方法,无需用户自定义函数(UDF):
from pyspark.sql.functions import unix_timestamp, from_unixtime df = spark.createDataFrame( [("11/25/1991",), ("11/24/1991",), ("11/30/1991",)], ['date_str'] ) df2 = df.select( 'date_str', from_unixtime(unix_timestamp('date_str', 'MM/dd/yyy')).alias('date') ) print(df2) # Output: # DataFrame[date_str: string, date: timestamp] df2.show(truncate=False) # Output: # +----------+-------------------+ # |date_str |date | # +----------+-------------------+ # |11/25/1991|1991-11-25 00:00:00| # |11/24/1991|1991-11-24 00:00:00| # |11/30/1991|1991-11-30 00:00:00| # +----------+-------------------+
在此方法中,unix_timestamp 将字符串列转换为 Unix 时间戳,from_unixtime 将 Unix 时间戳转换为日期列。
以上是如何将 PySpark 字符串列转换为日期格式?的详细内容。更多信息请关注PHP中文网其他相关文章!