我想根据键找到多少个不同的值,例如,假设我有
x = sc.parallelize([("a", 1), ("b", 1), ("a", 1), ("b", 2), ("a", 2)])
我已经完成了使用groupByKey
sorted(x.groupByKey().map(lambda x : (x[0], list(x[1]))).collect())
x.groupByKey().mapValues(len).collect()
输出将由like,
[('a', [1, 1, 2]), ('b', [1, 2])]
[('a', 3), ('b', 2)]
但是,我想在列表中找到不同的值,输出应该是,
[('a', [1, 2]), ('b', [1, 2])]
[('a', 2), ('b', 2)]
我很新兴火花并尝试在某处应用distinct()函数,但都失败了:-( 非常感谢提前!
答案 0 :(得分:1)
您可以使用set而不是list -
sorted(x.groupByKey().map(lambda x : (x[0], set(x[1]))).collect())
答案 1 :(得分:0)
您可以尝试多种方法。我用下面的方法解决了它: -
from operator import add
x = sc.parallelize([("a", 1), ("b", 1), ("a", 1), ("b", 2), ("a", 2)])
x = x.map(lambda n:((n[0],n[1]), 1))
x.groupByKey().map(lambda n:(n[0][0],1)).reduceByKey(add).collect()
<强>输出: - 强>
[('b', 2), ('a', 2)]
希望这会对你有帮助。