我有一个这样的spark数据框:
word1 word2 co-occur
---- ----- -------
w1 w2 10
w2 w1 15
w2 w3 11
我的预期结果是:
word1 word2 co-occur
---- ----- -------
w1 w2 25
w2 w3 11
我尝试了数据框的groupBy
和聚合函数,但是无法提出解决方案。
答案 0 :(得分:3)
您需要一个包含两个单词(按排序顺序)的列,然后该列可用于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
如果您想同时使用两个单词作为spearate dataframe列,请在以后使用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