2017-11-18 3 views
1

dys라는 이름의 pyspark 데이터 프레임이 있습니다. "데이터"holydays 목록에있는 경우 "휴일"그렇지 않으면 내가 그것으로 종료 : DAY_TYPE 경기장을 떠나지하려는다른 열의 값을 기반으로 pyspark 열을 변경하십시오.

holydays=[u'2016-12-25',u'2016-12-08'....] 

내가 종료 : DAY_TYPE을 전환하려면 :

ONE LINE EXAMPLE: 

df.take(1) 
[Row(data=u'2016-12-25',nome=u'Mauro',day_type="SUN")] 

나는 휴일 일의 목록을 가지고 입니다.

이 내 비 작동 시험입니다 :

df=df.withColumn("day_type",when(col("data") in holydays, "HOLIDAY").otherwise(col("day_type"))) 

PySpark는 "holydays에서"표현을 좋아하지 않는다. 그것은이 오류를 반환하는 대신 값이 목록에 있는지 확인하기 위해 절에서 사용하는 열을

ValueError: Cannot convert column into bool: please use '&' for 'and', '|' 

답변

2

- 당신은 isin 필요

spark.version 
# u'2.2.0' 

from pyspark.sql import Row 
from pyspark.sql.functions import col, when 

df=spark.createDataFrame([Row(data=u'2016-12-25',nome=u'Mauro',day_type="SUN")]) 

holydays=[u'2016-12-25',u'2016-12-08'] 

df.withColumn("day_type",when(col("data").isin(holydays), "HOLIDAY").otherwise(col("day_type"))).show() 
# +----------+--------+-----+ 
# |  data|day_type| nome| 
# +----------+--------+-----+ 
# |2016-12-25| HOLIDAY|Mauro| 
# +----------+--------+-----+ 

두 번째 질문에 대해서는 - 내가 어떤 문제가 표시되지 않습니다 : BTW

df.withColumn("day_type",when(col("data")=='2016-12-25', "HOLIDAY").otherwise(col("day_type"))).filter("day_type='HOLIDAY'").show() 
# +----------+--------+-----+ 
# |  data|day_type| nome| 
# +----------+--------+-----+ 
# |2016-12-25| HOLIDAY|Mauro| 
# +----------+--------+-----+ 

을, 단 하나의 샘플 데이터 행을 제공하는 것이 항상 좋은 생각입니다 ...

1

사용 ISIN 기능을. 샘플 코드 : 첫 번째 질문에 대해서는

df=df.withColumn("day_type",when(df.data.isin(holydays), "HOLIDAY").otherwise(df.day_type))) 
관련 문제