我想过滤一个包含类别列的数据框( List [String] )。我想忽略所有具有无效类别的行。它们不在 model.getCategories
中时无效def checkIncomingData(model: Model, incomingData: DataFrame) : DataFrame = {
val list = model.getCategories.toList
sc.broadcast(list)
incomingData.filter(incomingData("categories").isin(list))
}
不幸的是,我的方法不起作用,因为类别是列表,而不是单个元素。知道谁让它工作?
答案 0 :(得分:3)
我看到的第一个问题是你没有将广播分配给变量。
val broadcastList = sc.broadcast(list)
此外,您必须使用broadcastList.value
来引用它。例如:
incomingData.filter($"categories".isin(broadcastList.value: _*))
注意强>
@LostInOverflow作出了重要贡献,他澄清了我的答案,并说方法isin
实际上是在驱动程序中进行评估,因此广播列表根本没有帮助,更重要的是列表应该扩展以便被评估。
答案 1 :(得分:1)
只需展开列表:
incomingData.filter(incomingData("categories").isin(list: _*))
注意:广播对您没有帮助。这是在驱动程序上评估的。