【发布时间】: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
我的 RDD all_keys 存储值列表:
>> all_keys.take(3)
[['a','b','c'],
['a','b'],
['a','d','f']]
这些值中的大多数都是重复出现的,但有些列表确实具有其他列表中不存在的值。
如何从存储在 RDD 中的所有列表中获取唯一元素的列表?
【问题讨论】:
标签: apache-spark pyspark
您需要对您的 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', '应用程序', '谷', '标签', '应用名称']
【讨论】:
如果您的意思是删除最终列表中的重复项(您的示例中没有重复项)
list(set(all_keys.take(3)))
如果您的意思是删除 rdd 中一个键的重复条目,例如'a' 使用
all_keys.distinct(lambda row:row[0])
【讨论】: