按数组列筛选Dataframe

jgzswidk  于 2021-05-27  发布在  Spark
关注(0)|答案(2)|浏览(530)

我想过滤一个Dataframe,它有一个带有类别(list[string])的列。我想忽略所有类别无效的行。它们不在model.getcategories中时无效

  1. def checkIncomingData(model: Model, incomingData: DataFrame) : DataFrame = {
  2. val list = model.getCategories.toList
  3. sc.broadcast(list)
  4. incomingData.filter(incomingData("categories").isin(list))
  5. }

不幸的是,我的方法不起作用,因为categories是一个列表,而不是一个元素。你知道是谁做的吗?

qgelzfjb

qgelzfjb1#

只需展开列表:

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

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

amrnrhlw

amrnrhlw2#

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

  1. val broadcastList = sc.broadcast(list)

另外,你必须用 broadcastList.value . 例如:

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

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

相关问题