PySpark:无法将日期列与字典匹配

cgfeq70w  于 5个月前  发布在  Spark
关注(0)|答案(1)|浏览(50)

我确信这是一个简单的更改,但只是将日期列与项目列表匹配就有问题。例如使用假期包,但问题可以应用于其他用例,只是我在PySpark的经验不是很好!!
使用holidays包(https://pypi.org/project/holidays/),我检索假期的字典

nyse_holidays=holidays.financial.ny_stock_exchange.NewYorkStockExchange(years=2018)
print(nyse_holidays)

字符串

  • {datetime.date(2018,12,5):'Day of President乔治H.W. Bush',datetime.date(2018,1,1):“New Year's Day”,datetime.date(2018,1,15):'Martin Luther King Jr. Day',datetime.date(2018,2,19):“华盛顿的生日”,datetime.date(2018,3,30):'Good Friday',datetime.date(2018,5,28):'Memorial Day',datetime.date(2018,7,4):'Independence Day',datetime.date(2018,9,3):'Labor Day',datetime.date(2018,11,22):'Thanksgiving Day',datetime.date(2018,12,25):圣诞节

我还有另一个Spark Dataframe ,其模式如下

root
 |-- id: long (nullable = false)
 |-- date: timestamp (nullable = false)
 |-- year: integer (nullable = false)
 |-- month: integer (nullable = false)
 |-- day: string (nullable = false)
 |-- day_of_year: string (nullable = false)
 |-- hour: string (nullable = false)
 |-- minute: string (nullable = false)
 |-- is_weekend: boolean (nullable = false)
 |-- only_date: date (nullable = false)


我只是想添加另一个字段,说明该行的日期是否为假日
下面的代码从不匹配任何日期

from pyspark.sql.functions import col, create_map, lit
from itertools import chain

mapping_expr = create_map([lit(x) for x in chain(*nyse_holidays.items())])
#search_date
display(df.withColumn("value", mapping_expr["only_date"]).filter(col("value").isNotNull()))


如果我将代码更改为一个固定值以检查mapping_expr是否工作,那么它就可以正常工作。

search_date = datetime.strptime('2018-01-01', '%Y-%m-%d')
display(df.withColumn("value", mapping_expr[search_date]).filter(col("value").isNotNull()))


当然,代码只会使用'date'字段,但我想我会创建一个only_date字段。
任何建议,当然我只是错过了一些愚蠢的东西。假设它的转换字段被过去到mapping_expr

6ioyuze2

6ioyuze21#

简单到只需要在Map表达式中传入col(“only_date”)。
长时间的其他事情!头脑不集中,给予我c#!:)

相关问题