2017-08-15 78 views
1

我确定这很简单,但我一直存在问题。我有一个关键值对的RDD。我想要一个清晰的关键字。我将分享代码和示例。先谢谢你!PySpark RDD的每个键的不同列表

RDD例

>>> rdd4.take(3) 
[[(u'11394071', 1), (u'11052103', 1), (u'11052101', 1)], [(u'11847272', 10), (u'999999', 1), (u'11847272', 10)], [(u'af1lowprm1704', 5), (u'am1prm17', 2), (u'af1highprm1704', 2)]] 

试图/没有工作

rdd4.distinct().keys() 
rdd4.map(lambda x: tuple(sorted(x))).keys().distinct() 

[(u'10972402', 1), (u'10716707', 1), (u'11165362', 1)] 

优选结构

[u'11394071', u'11052101', '999999', u'11847272', u'am1prm17', u'af1highprm1704'] 
+0

钥匙'11052103'和'u'af1lowprm1704'怎么办? – Psidom

回答

1

例如,您可以:

rdd.flatMap(lambda x: x).keys().distinct() 
+0

非常感谢你!使用平面地图有意义。 – Andre

1

您可以使用flatMap摆脱内心的元组键,然后调用distinct关于结果RDD

rdd = sc.parallelize([[(u'11394071', 1), (u'11052103', 1), (u'11052101', 1)], [(u'11847272', 10), (u'999999', 1), (u'11847272', 10)], [(u'af1lowprm1704', 5), (u'am1prm17', 2), (u'af1highprm1704', 2)]]) 

rdd.flatMap(lambda x: [k for k, _ in x]).distinct().collect() 
# [u'999999', u'11394071', u'11847272', u'af1highprm1704', u'11052101', u'af1lowprm1704', u'am1prm17', u'11052103'] 
1

如果你只想从键列不同的值,和你有一个数据框,你可以这样做:

df.select('k').distinct() 

如果只有RDD,你可以做

rdd.map(lambda r: r[0]).distinct 

假设关键是你的左栏