我有一个看起来像这样的数据框
df1:
image-id colorList
-------------------------
id1 [Red,Blue]
id2 [White,Grey]
现在我想使用df1
创建一个新的Dataframe,看起来像这样
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
选择df1
{{1}}上的colorList,但这会让我的表太复杂。
答案 0 :(得分:3)
您要查找的是array_contains
函数,而不是Column.contains
(后者仅适用于StringType
列并检查字符串值是否包含子字符串):
df1.withColumn("isRed", when(array_contains($"colorList", "Red"),1).otherwise(0))