【问题标题】:Find unique set of elements among lists stored as elements of RDD在存储为 RDD 元素的列表中查找唯一的元素集
【发布时间】:2016-06-23 17:06:31
【问题描述】:

我的 RDD all_keys 存储值列表:

>> all_keys.take(3)
[['a','b','c'],
 ['a','b'],
 ['a','d','f']]

这些值中的大多数都是重复出现的,但有些列表确实具有其他列表中不存在的值。

如何从存储在 RDD 中的所有列表中获取唯一元素的列表?

【问题讨论】:

    标签: apache-spark pyspark


    【解决方案1】:

    您需要对您的 RDD 进行平面映射,以将其从字符串列表的 RDD 转换为字符串的 RDD。然后,您可以使用distinct() 方法仅返回唯一字符串。

    创建数据

    all_keys = [['category', 'ser_id', 'appname', 'timestamp', 'label', 'ser_token', 'appver', 'action'],
         ['category', 'ser_id', 'appname', 'timestamp', 'vale', 'label', 'ser_token', 'appver', 'action', 'type'], 
         ['category', 'ser_id', 'appname', 'timestamp', 'vale', 'label', 'ser_token', 'appver', 'type' ]]
    rdd = sc.parallelize(all_keys)
    

    定义 flatMap 函数

    def explode(row):
        for k in row:
            yield k
    

    平面图,获取不同的元素,收集

    rdd.flatMap(explode).distinct().collect()
    

    结果

    ['类别', 'ser_id', '类型', '行动', '时间戳', 'ser_token', '应用程序', '谷', '标签', '应用名称']

    【讨论】:

      【解决方案2】:

      如果您的意思是删除最终列表中的重复项(您的示例中没有重复项)

      list(set(all_keys.take(3)))
      

      如果您的意思是删除 rdd 中一个键的重复条目,例如'a' 使用

      all_keys.distinct(lambda row:row[0])
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-11-16
        • 2016-01-12
        • 1970-01-01
        • 2020-04-12
        • 1970-01-01
        • 1970-01-01
        • 2019-11-11
        • 2023-03-16
        相关资源
        最近更新 更多