我有一个名为id,feat1和feat2的3列数据框 . feat1和feat2采用Array of String的形式:
Id, feat1,feat2
------------------
1, ["feat1_1","feat1_2","feat1_3"],[]
2, ["feat1_2"],["feat2_1","feat2_2"]
3,["feat1_4"],["feat2_3"]
我想获取每个功能列中的不同元素列表,因此输出将是:
distinct_feat1,distinct_feat2
-----------------------------
["feat1_1","feat1_2","feat1_3","feat1_4"],["feat2_1","feat2_2","feat2_3]
在Scala中执行此操作的最佳方法是什么?
2 回答
在每列上应用
explode
函数后,可以使用collect_set
查找相应列的不同值,以取消每个单元格中的数组元素 . 假设您的数据框名为df
:Psidom提供的方法效果很好,这是一个函数,在给定Dataframe和字段列表的情况下也是如此:
然后: