首页 文章

来自RDD的每个密钥的PySpark Distinct列表

提问于
浏览
1

我确信这很简单,但我一直有问题 . 我有一个带键值对的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']

3 回答

  • 2

    你可以举例如:

    rdd.flatMap(lambda x: x).keys().distinct()
    
  • 2

    您可以使用 flatMap 从内部元组获取密钥,然后在结果 RDD 上调用 distinct

    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']
    
  • 2

    如果您只想要键列中的不同值,并且您有一个数据帧,则可以执行以下操作:

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

    如果您只有RDD,那么您可以这样做

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

    假设钥匙是你的左栏

相关问题