2017-11-18 23 views
1

私はdfと呼ばれるpysparkデータフレームを持っています。別の列の値に基づいてpyspark列を変更してください

ONE LINE EXAMPLE: 

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

私は休日の日のリストを持っている:

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

私は「データ」holydaysリストにある場合は「HOLIDAY」にDAY_TYPEを切り替えたいそうでない場合、私はそれとしてDAY_TYPEフィールドを残したいですです。

これは私の非作業暫定的である:

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を必要とする:あなたの2番目の質問については

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| 
# +----------+--------+-----+ 

を - 私はすべての問題が表示されない:

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))) 
関連する問題