假设我有这个数据帧。
var df = Seq(("Steve",1),("Steve",0),("Michael",3),("Michael",2),("Katherine",4),("Katherine",0),("Devin",0),("Devin",0)).toDF("name","score")

我希望返回唯一的名称,其中它们的得分都不等于零。因此,在本例中,唯一返回的名字将是Michael,因为他的两个分数都大于零。
非常感谢!
发布于 2020-11-09 00:56:26
如果要将条件应用于多个行,则需要使用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")https://stackoverflow.com/questions/64740656
复制相似问题