Arrays 在pyspark中重新分析日期,不带udf

Arrays 在pyspark中重新分析日期,不带udf,arrays,pyspark,reverse,Arrays,Pyspark,Reverse,我试图通过将dd/mm/yyyy替换为yyyy-mm-dd来解析pyspark中的日期列 import pyspark.sql.functions as F spark = SparkSession.builders.appName('test').getOrCreate() sc = spark.sparkContext sqlc = pyspark.sql.SQLContext(sc) df = sqlc.createDataFrame([('01/01/2018','user1'),('

我试图通过将dd/mm/yyyy替换为yyyy-mm-dd来解析pyspark中的日期列

import pyspark.sql.functions as F
spark = SparkSession.builders.appName('test').getOrCreate()
sc = spark.sparkContext
sqlc = pyspark.sql.SQLContext(sc)

df = sqlc.createDataFrame([('01/01/2018','user1'),('28/02/2017','user2')], ['Date','user'])
df.show()
+----------+-----+
|      Date| user|
+----------+-----+
|01/01/2018|user1|
|28/02/2017|user2|
+----------+-----+
到目前为止,我所做的是:

df.select( F.concat_ws('-',F.split(F.col('Date'),'/')).alias('Date_parsed')).show()
+-----------+
|Date_parsed|
+-----------+
| 01-01-2018|
| 28-02-2017|
+-----------+
我想得到的是:

+-----------+
|Date_parsed|
+-----------+
| 2018-01-01|
| 2017-02-28|
+-----------+

您知道如何在不使用自定义项的情况下执行此操作吗?

在这种情况下,您可以使用sql函数

>>> import pyspark.sql.functions as F
>>> 
>>> df.show()
+----------+-----+
|      Date| user|
+----------+-----+
|01/01/2018|user1|
|28/02/2017|user2|
+----------+-----+

>>> df.withColumn('Date',F.date_format(F.to_date('Date','dd/MM/yyyy'),'yyyy-MM-dd')).show()
+----------+-----+
|      Date| user|
+----------+-----+
|2018-01-01|user1|
|2017-02-28|user2|
+----------+-----+
更新:请注意,在spark的某些版本中,例如2.1.1,to_date不以格式设置为参数,那么您可以使用F.unix_timestamp预先设置日期列的格式:

df.withColumn('Date',F.date_format(F.to_date(
            F.unix_timestamp(F.col('Date'),'dd/MM/yyyy').cast('timestamp')
                                             ),'yyyy-MM-dd')).show()

我尝试过使用它,不幸的是我得到了错误:TypeError:to_date正好取1个参数2。请注意,我使用的是spark 2.1.1。我认为这是因为spark版本。试试这个df.withColumn'Date',F.Date\u formatF.unix\u timestamp'Date','dd/MM/yyyyy'。casttimestamp,'yyyyy-MM-dd'。显示这个功能非常好,谢谢!不过,这里还有一个关于更改日期列显示的解析的问题。Ali Yesilli给出的函数to_date可以完美地工作。