我的Spark DataFrame中有一列open_date
,其字符串类型值如下,这是两种不同的格式yyyymmdd
和yyyymm
+---------+
|open_date|
+---------+
| 19500102|
| 195001|
+---------+
我的预期输出是
+----------+
| open_date|
+----------+
|1950-01-02|
|1950-01-01|
+----------+
我尝试使用
pyspark.sql.functions.substr
,pyspark.sql.functions.split
和pyspark.sql.functions.regex_extract
将此字符串转换为日期格式。由于对这些知识的了解有限,他们都没有成功。如何在不同格式的列上将字符串转换为日期类型?
最佳答案
您可以要求存在yyyy
和mm
,但是将dd
设置为可选。将它们分成自己的捕获组,如果缺少filter
,则将其分成dd
,然后使用join
分隔符将其分隔为'-'
。
>>> import re
>>> s = '19500102 195001'
>>> ['-'.join(filter(None, i)) for i in re.findall(r'(\d{4})(\d{2})(\d{2})?', s)]
['1950-01-02', '1950-01']
关于python - 如何在具有不同日期格式的列上将字符串转换为日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50337064/