2017-04-24 35 views
0

我有一個數據幀,看起來像這樣在星火灌裝數據幀與「時」功能

df1: 
image-id colorList 
------------------------- 
id1  [Red,Blue] 
id2  [White,Grey]  

現在我想創建一個使用df1,看起來像這樣

df2: 
image-id isRed isBlue isWhite isGrey 
---------------------------------------- 
id1  1  1  0  0 
id2  0  0  1  1 

我是一個新的數據幀試圖使用以下代碼,並且由於類型不匹配而無法工作

val df2 = df1.withColumn("image-id",$"image-id") 
.withColumn("isRed", when($"colorList" contains "Red",1).otherwise(0)) 

我試過

val df2 = df1.withColumn("image-id",$"image-id") 
.withColumn("isRed", when($"colorList" contains Seq("Red"),1).otherwise(0)) 

,我得到這個消息

不支持的文本類型類scala.collection.immutable $結腸結腸$列表(紅色)

我可以選擇explode的colorList在df1,但它會讓我的表太複雜。

回答

2

什麼你要找的是array_contains功能,不Column.contains(後者只適用於StringType列和檢查字符串值是否包含字符串):

df1.withColumn("isRed", when(array_contains($"colorList", "Red"),1).otherwise(0)) 
+0

謝謝@Tzach,'array_contains '工作。 – Sha2b