繁体   English   中英

如果匹配其他列,则对一个列值求和

[英]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

我尝试了groupBygroupBy和聚合函数,但我无法提出解决方案。

您需要一个包含按排序顺序排列的单词的列,然后可以将此列用于groupBy 您可以使用包含word1word的数组创建一个新列,如下所示:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM