[英]Sum one column values if other columns are matched
我有一个像这样的火花数据帧:
word1 word2 co-occur
---- ----- -------
w1 w2 10
w2 w1 15
w2 w3 11
我的预期结果是:
word1 word2 co-occur
---- ----- -------
w1 w2 25
w2 w3 11
我尝试了groupBy
的groupBy
和聚合函数,但我无法提出解决方案。
您需要一个包含按排序顺序排列的单词的列,然后可以将此列用于groupBy
。 您可以使用包含word1
和word
的数组创建一个新列,如下所示:
df.withColumn("words", sort_array(array($"word1", $"word2")))
.groupBy("words")
.agg(sum($"co-occur").as("co-occur"))
这将产生以下结果:
words co-occur
----- --------
["w1","w2"] 25
["w2","w3"] 11
如果您希望将这两个单词作为特殊的数据帧列,请在之后使用getItem
方法。 对于上面的示例,请将以下行添加到上面:
df.withColumn("word1", $"words".getItem(0))
.withColumn("word2", $"words".getItem(1))
.drop($"words")
最终的结果dataFrame看起来像这样:
word1 word2 co-occur
---- ----- -------
w1 w2 25
w2 w3 11
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.