在pyspark中获得每月的周数

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

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

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

预期的Dataframe

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

我用了下面的代码

  1. 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 以及适当的日期格式字符串。

  1. import calendar
  2. import pyspark.sql.functions as F
  3. df2 = df.withColumn(
  4. "number_of_weeks",
  5. F.udf(lambda y, m: len(calendar.monthcalendar(y, m)))
  6. (
  7. F.year(F.to_date('date', 'dd-MM-yyyy')),
  8. F.month(F.to_date('date', 'dd-MM-yyyy'))
  9. )
  10. )
  11. df2.show()
  12. +----------+---+---------------+
  13. | date| id|number_of_weeks|
  14. +----------+---+---------------+
  15. |01-01-2020| 1| 5|
  16. |01-02-2020| 2| 5|
  17. |01-03-2020| 3| 6|
  18. |01-04-2020| 4| 5|
  19. +----------+---+---------------+
展开查看全部

相关问题