从 PySpark python 中的日期获取工作日名称

lee*_*ena 2 python pyspark

我使用此代码从字符串类型的日期返回日期名称:

import Pandas as pd
df = pd.Timestamp("2019-04-10")
print(df.weekday_name)
Run Code Online (Sandbox Code Playgroud)

所以当我有“2019-04-10”时,代码返回“星期三”

我想将它应用于 Pyspark DataFrame 中的一列以获取文本中的日期名称。但它似乎不起作用。

>+-------------+
|Reported Date|
+-------------+
|    1/07/2010|
|    1/07/2010|
|    1/07/2010|
|    1/07/2010|
|    1/07/2010|
|    1/07/2010|
|    1/07/2010|    
+-------------+
Run Code Online (Sandbox Code Playgroud)

我试图这样做:

sparkDF.withColumn("day",weekday_name(pd.Timestamp('Reported Date')))
Run Code Online (Sandbox Code Playgroud)

但我收到错误消息:NameError: name 'weekday_name' is not defined

谁能帮我这个?谢谢

SMa*_*MaZ 5

PySpark 文档在这个主题上有点不清楚,但它在内部使用 Java 日期格式。

你可以这样使用:

df.show()
+----------+
|      date|
+----------+
|2010-01-07|
+----------+

df.printSchema()
root
 |-- date: date (nullable = true)
Run Code Online (Sandbox Code Playgroud)

现在,要获得我们可以使用的工作日的短名称,E/EE/EEE如果您想要全名,则需要提供超过 3E 的名称,例如EEEE

简写:

import pyspark.sql.functions as f

df.withColumn('Day', f.date_format('date', 'E')).show()
+----------+---+
|      date|Day|
+----------+---+
|2010-01-07|Thu|
+----------+---+
Run Code Online (Sandbox Code Playgroud)

满的:

df.withColumn('Day', f.date_format('date', 'EEEE')).show()
+----------+--------+
|      date|     Day|
+----------+--------+
|2010-01-07|Thursday|
+----------+--------+

Run Code Online (Sandbox Code Playgroud)