在pyspark中获得每月的周数

xv8emn3q  于 2021-07-12  发布在  Spark
关注(0)|答案(1)|浏览(336)

在Pypark中计算一个月内的周数。

date          id
01-01-2020     1
01-02-2020     2
01-03-2020     3
01-04-2020     4

预期的Dataframe

date          id   no of weeks
01-01-2020     1     5
01-02-2020     2     5
01-03-2020     3     6
01-04-2020     4     5

我用了下面的代码

df=df.withColumn("number_of_weeks",F.lit((calendar.monthcalendar(F.year(col('date')),F.month(col('date')))

我要走了
valueerror:无法将列转换为bool:在生成Dataframe布尔表达式时,请使用“&”表示“and”,使用“|”表示“or”,使用“~”表示“not”。

beq87vna

beq87vna1#

您需要使用一个udf来使用带有spark列的python模块。使用 F.year 以及 F.month ,您还需要首先将date列转换为datetype,使用 to_date 以及适当的日期格式字符串。

import calendar
import pyspark.sql.functions as F

df2 = df.withColumn(
    "number_of_weeks",
    F.udf(lambda y, m: len(calendar.monthcalendar(y, m))) 
    (
        F.year(F.to_date('date', 'dd-MM-yyyy')),
        F.month(F.to_date('date', 'dd-MM-yyyy'))
    )
)

df2.show()
+----------+---+---------------+
|      date| id|number_of_weeks|
+----------+---+---------------+
|01-01-2020|  1|              5|
|01-02-2020|  2|              5|
|01-03-2020|  3|              6|
|01-04-2020|  4|              5|
+----------+---+---------------+

相关问题