按阵列列筛选DataFrame

时间:2016-10-25 15:30:30

标签: scala apache-spark dataframe spark-dataframe

我想过滤一个包含类别列的数据框( 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))
}

不幸的是,我的方法不起作用,因为类别是列表,而不是单个元素。知道谁让它工作?

2 个答案:

答案 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: _*))

注意:广播对您没有帮助。这是在驱动程序上评估的。