我有一个日期 pyspark 数据框,其字符串列的格式为 MM-dd-yyyy
我正在尝试将其转换为日期列。
我试过了:
df.select(to_date(df.STRING_COLUMN).alias('new_date')).show()
我得到一串空值。任何人都可以帮忙吗?
原文由 Jenks 发布,翻译遵循 CC BY-SA 4.0 许可协议
我有一个日期 pyspark 数据框,其字符串列的格式为 MM-dd-yyyy
我正在尝试将其转换为日期列。
我试过了:
df.select(to_date(df.STRING_COLUMN).alias('new_date')).show()
我得到一串空值。任何人都可以帮忙吗?
原文由 Jenks 发布,翻译遵循 CC BY-SA 4.0 许可协议
from datetime import datetime
from pyspark.sql.functions import col, udf
from pyspark.sql.types import DateType
# Creation of a dummy dataframe:
df1 = sqlContext.createDataFrame([("11/25/1991","11/24/1991","11/30/1991"),
("11/25/1391","11/24/1992","11/30/1992")], schema=['first', 'second', 'third'])
# Setting an user define function:
# This function converts the string cell into a date:
func = udf (lambda x: datetime.strptime(x, '%m/%d/%Y'), DateType())
df = df1.withColumn('test', func(col('first')))
df.show()
df.printSchema()
这是输出:
+----------+----------+----------+----------+
| first| second| third| test|
+----------+----------+----------+----------+
|11/25/1991|11/24/1991|11/30/1991|1991-01-25|
|11/25/1391|11/24/1992|11/30/1992|1391-01-17|
+----------+----------+----------+----------+
root
|-- first: string (nullable = true)
|-- second: string (nullable = true)
|-- third: string (nullable = true)
|-- test: date (nullable = true)
原文由 Hugo Reyes 发布,翻译遵循 CC BY-SA 3.0 许可协议
4 回答4.4k 阅读✓ 已解决
4 回答3.8k 阅读✓ 已解决
1 回答2.9k 阅读✓ 已解决
3 回答2.1k 阅读✓ 已解决
1 回答4.5k 阅读✓ 已解决
1 回答3.8k 阅读✓ 已解决
1 回答2.8k 阅读✓ 已解决
更新(2018 年 1 月 10 日):
对于 Spark 2.2+,最好的方法可能是使用
to_date
或to_timestamp
函数,它们都支持format
参数。从文档:原始答案(适用于 Spark < 2.2)
可以(最好?)在没有 udf 的情况下执行此操作: