Scala 按数组列筛选数据帧

Scala 按数组列筛选数据帧,scala,apache-spark,dataframe,spark-dataframe,Scala,Apache Spark,Dataframe,Spark Dataframe,我想过滤一个dataframe,该dataframe有一个带有categories List[字符串]的列。我想忽略所有类别无效的行。当它们不在model.getCategories中时无效 不幸的是,我的方法不起作用,因为类别是一个列表,而不是单个元素。知道由谁来做吗 我看到的第一个问题是您没有将广播分配给变量 val broadcastList = sc.broadcast(list) 此外,您必须使用broadcastList.value引用它。例如: incomingData.filt

我想过滤一个dataframe,该dataframe有一个带有categories List[字符串]的列。我想忽略所有类别无效的行。当它们不在model.getCategories中时无效


不幸的是,我的方法不起作用,因为类别是一个列表,而不是单个元素。知道由谁来做吗

我看到的第一个问题是您没有将广播分配给变量

val broadcastList = sc.broadcast(list)
此外,您必须使用broadcastList.value引用它。例如:

incomingData.filter($"categories".isin(broadcastList.value: _*))

@LostInOverflow做出了重要贡献,他澄清了我的答案,并说方法isin实际上是在驱动程序中评估的,因此广播列表根本没有帮助,更重要的是,列表应该扩展以进行评估。

我看到的第一个问题是,您没有将广播分配给变量

val broadcastList = sc.broadcast(list)
此外,您必须使用broadcastList.value引用它。例如:

incomingData.filter($"categories".isin(broadcastList.value: _*))
注 @LostInOverflow做出了重要贡献,他澄清了我的答案,并说方法isin实际上是在驱动程序中进行评估的,因此广播列表根本没有帮助,更重要的是,为了进行评估,应该扩展列表。

只需扩展列表:

incomingData.filter(incomingData("categories").isin(list: _*))
注意:广播在这里对你没有帮助。这在驱动程序上进行评估。

只需展开列表:

incomingData.filter(incomingData("categories").isin(list: _*))

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

广播在这里无效。请问什么?我试着把我的答案放在问题的背景中考虑一下评估的顺序。isin的论点在驾驶员身上得到了热切的评价。它与InComingData没有区别。筛选$categories。是否完全确定?因为我认为这可能是并行的,如果每个节点都有广播的列表,它可以帮助提高性能。也许我错了,我肯定。我投了更高的票,因为这是一个有用的音符,但并不能解决问题。请检查我的答案。广播在这里无效。请问什么?我试着把我的答案放在问题的背景中考虑一下评估的顺序。isin的论点在驾驶员身上得到了热切的评价。它与InComingData没有区别。筛选$categories。是否完全确定?因为我认为这可能是并行的,如果每个节点都有广播的列表,它可以帮助提高性能。也许我错了,我肯定。我投了更高的票,因为这是一个有用的音符,但并不能解决问题。请核对我的答案。