应用 set() 删除元组内列表中的重复项 - Python
Posted
技术标签:
【中文标题】应用 set() 删除元组内列表中的重复项 - Python【英文标题】:apply set() to remove duplicates in a list inside a tuple - Python 【发布时间】:2015-06-24 16:45:08 【问题描述】:我有一个 RDD 键/值对,其中 value 是这样的列表: 我的RDD是这样的
[("a1",["w1","w2","w3","w1"]), ("a2",["w3","w3","w3","w1"]), ....
如何将函数集应用到列表元素以删除重复项?
到目前为止我有这个但没有得到正确的结果:
uniqueTokens = RDD.map(lambda x: (x[0],set(x[1])))
感谢您的帮助!
【问题讨论】:
请展示您得到的结果,与您的预期相比。 我有这个 RDD:[("a1",["w1","w2","w3","w1"]), ("a2",["w3","w3 ","w3","w1"]),... 并且想要这个:[("a1",["w1","w2","w3"), ("a2",["w3"," w1"]) 每对不应该有重复 致不熟悉 RDD 的 Python 达人:spark.apache.org/docs/0.8.1/api/core/org/apache/spark/rdd/… 您的代码在 pySpark 1.4.1 中按预期工作: rdd = sc.parallelize([("a1",["w1","w2","w3","w1"] ), ("a2",["w3","w3","w3","w1"])]) uniqueTokens = rdd.map(lambda x: (x[0],set(x[1])) ) print(uniqueTokens.collect()) 输出:[('a1', set(['w3', 'w2', 'w1'])), ('a2', set(['w3', 'w1' ]))] 【参考方案1】:rdd [("a1",["w1","w2","w3","w1"]), ("a2",["w3","w3","w3","w1"]), ....
中每个列表的唯一项,例如:(w1, w2, w3, w3, w1,...)
。您可以在flatMap()
中使用set()
:
RDD.flatMap(lambda x: set(x[1]))
>> (w1, w2, w3, w3, w1,...)
#if you want to get unique items in each list and total counts across whole rdd
RDD.flatMap(lambda x: set(x[1]))
.map(lambda x: (x , 1))
.reduceByKey(lambda x, y : x + y ).collect()
>> [(w1, 2), (w2, 1), (w3, 2)]
希望对你有帮助
【讨论】:
数据框可以做到这一点吗?【参考方案2】:In [48]: lt
Out[48]: [('a1', ['w1', 'w2', 'w3', 'w1']), ('a2', ['w3', 'w3', 'w3', 'w1'])]
In [49]: [(x,set(y)) for (x,y) in lt]
Out[49]: [('a1', 'w1', 'w2', 'w3'), ('a2', 'w1', 'w3')]
【讨论】:
没有工作记得我有一个 RDD ,带有键/值对,值对是一个列表以上是关于应用 set() 删除元组内列表中的重复项 - Python的主要内容,如果未能解决你的问题,请参考以下文章