2017-04-24 103 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