按 spark python 中的值分组
group by value in spark python
我尝试按原始键值对中的值进行分组,例如
[(1, a), (2, a), (3, a), (4, a), (3, b), (1, b), (1, c), (4, c), (4, d)]
我可以使用 groupByKey() 方法按键分组,但我找不到按值分组的方法
a = [1 , 2 , 3 , 4]
b = [3, 1]
c = [1, 4]
d = [4]
我查看了 spark API 文档,但找不到任何方法
你可以通过反转 RDD 中的元组来做到这一点,
RDD.map(lambda s: reversed(s))
[(1, a), (2, a),....]
会变成
[(a, 1), (a, 2),....]
现在groupByKey()。
虽然我不确定效率,但它会起作用:)
你可以使用这个脚本,
它将按值分组。
vals = [(1, 'a'), (2, 'a'), (3, 'a'), (4, 'a'), (3, 'b'), (1, 'b'), (1, 'c'), (4, 'c'), (4, 'd')]
lst = {}
for k,v in vals:
if v in lst.keys():
lst[v] = lst[v] + [k]
else:
lst[v] = [k]
print(lst)
Spark 的 RDD 有一个 groupBy
运算符,您可以在其中传递自定义 groupBy 函数。
data = sc.parallelize([(1, a), (2, a), (3, a), (4, a), (3, b), (1, b), (1, c), (4, c), (4, d)])
data.groupBy(lambda tup: tup[1])
这将按值(元组的第二个元素)对数据进行分组。请注意,groupBy 和 groupByKey 可能会导致内存不足异常并且是昂贵的操作。参见 Avoid GroupByKey
input = sc.parallelize([(1,"a"),(2,"a"),(3,"a"),(4,"a"),(1,"b"),(3,"b"),(1,"c"),(4,"c"),(4,"d")])
input.groupByKey().collect()
output1 = input.map(lambda (x,y):(y,x))
output2 = output1.groupByKey()
output2.collect()
我尝试按原始键值对中的值进行分组,例如
[(1, a), (2, a), (3, a), (4, a), (3, b), (1, b), (1, c), (4, c), (4, d)]
我可以使用 groupByKey() 方法按键分组,但我找不到按值分组的方法
a = [1 , 2 , 3 , 4]
b = [3, 1]
c = [1, 4]
d = [4]
我查看了 spark API 文档,但找不到任何方法
你可以通过反转 RDD 中的元组来做到这一点,
RDD.map(lambda s: reversed(s))
[(1, a), (2, a),....]
会变成
[(a, 1), (a, 2),....]
现在groupByKey()。
虽然我不确定效率,但它会起作用:)
你可以使用这个脚本,
它将按值分组。
vals = [(1, 'a'), (2, 'a'), (3, 'a'), (4, 'a'), (3, 'b'), (1, 'b'), (1, 'c'), (4, 'c'), (4, 'd')]
lst = {}
for k,v in vals:
if v in lst.keys():
lst[v] = lst[v] + [k]
else:
lst[v] = [k]
print(lst)
Spark 的 RDD 有一个 groupBy
运算符,您可以在其中传递自定义 groupBy 函数。
data = sc.parallelize([(1, a), (2, a), (3, a), (4, a), (3, b), (1, b), (1, c), (4, c), (4, d)])
data.groupBy(lambda tup: tup[1])
这将按值(元组的第二个元素)对数据进行分组。请注意,groupBy 和 groupByKey 可能会导致内存不足异常并且是昂贵的操作。参见 Avoid GroupByKey
input = sc.parallelize([(1,"a"),(2,"a"),(3,"a"),(4,"a"),(1,"b"),(3,"b"),(1,"c"),(4,"c"),(4,"d")])
input.groupByKey().collect()
output1 = input.map(lambda (x,y):(y,x))
output2 = output1.groupByKey()
output2.collect()