我的文件中有重复的记录,这些记录是作为词典列表收集的。这是我的sampleRDD
变量内容,它是pyspark.rdd.RDD
对象:
[{"A": 111, "B": 222, "C": 333}
,{"A": 111, "B": 222, "C": 333}]
我想获得以下一条记录:
[{"A": 111, "B": 222, "C": 333}]
答案 0 :(得分:0)
找到一个解决方案,但不确定它是否有效;但
定义删除重复项的功能:
def remove_repeat(dupRDD):
return([dict(tup) for tup in set(tuple(item.items()) for item in dupRDD)])
# Assuming 'AAA' is main key (can pick any)
sampleRDD_2 = sampleRDD.map(lambda snap: (snap['AAA'], snap)).groupByKey()
这会将RDD创建为[(111, <pyspark.resultiterable.ResultIterable object>)]
pyspark对象值可以通过列表获取,传递给remove_repeat
函数
sampleRDD_2.map(lambda x : (x, remove_repeat(list(x[1])))).collect()
在关键级别返回dict的重复数据删除列表:[(111,[{"A": 111, "B": 222, "C": 333}])]
答案 1 :(得分:0)
在字典列表中执行Pyspark时出现问题。 这是一种解决方法:
temp = sc.parallelize([{"A": 111, "B": 222, "C": 333}
,{"A": 111, "B": 222, "C": 333}])
print temp.map(lambda x: tuple(x.iteritems())).distinct().collect()
>>[(('A', 111), ('C', 333), ('B', 222))]
或者如果您需要以字典形式提供它:
print temp.map(lambda x: tuple(x.iteritems())).distinct().map(lambda x: dict(x)).collect()
>>[{'A': 111, 'C': 333, 'B': 222}]