如果组中的任何行的值为0,如何使用any条件进行筛选?

vulvrdjw  于 2021-05-18  发布在  Spark
关注(0)|答案(1)|浏览(474)

假设我有这个Dataframe。。。

var df = Seq(("Steve",1),("Steve",0),("Michael",3),("Michael",2),("Katherine",4),("Katherine",0),("Devin",0),("Devin",0)).toDF("name","score")


我想返回唯一的名称,其中它们的分数都不等于零。所以在这个例子中,唯一会被返回的名字是迈克尔,因为他的两个分数都在零以上。
非常感谢!

fnvucqvd

fnvucqvd1#

如果要在多行上应用条件,则需要使用groupby或window函数
在您的例子中,您可以按列“name”分组,聚合每个名称的得分列表,然后过滤掉得分列表中包含0的所有记录。您的代码是:

import org.apache.spark.sql.functions.{col, collect_set, array_contains, not}

df.groupBy("name")
  .agg(collect_set(col("score")).as("all_scores"))
  .filter(not(array_contains(col("all_scores"), 0)))
  .select("name")

相关问题