我的RDD all_keys
存储值列表:
>> all_keys.take(3)
[['a','b','c'],
['a','b'],
['a','d','f']]
这些值中的大多数都是重复发生的,但有些列表确实具有其他列表中不存在的值。
如何从RDD中存储的所有列表中获取唯一元素列表?
答案 0 :(得分:2)
您需要对您的RDD进行flatMap,以将其从字符串列表的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
Flatmap,获取不同的元素,收集
rdd.flatMap(explode).distinct().collect()
结果
[ '类别', 'ser_id', '类型', '行动', “时间戳”, 'ser_token', 'appver', '谷', '标签', '应用程序的名字']
答案 1 :(得分:-1)
如果您的意思是删除最终列表中的重复项(示例中没有重复项)
list(set(all_keys.take(3)))
如果您的意思是删除rdd中一个键的重复条目,例如'一个'使用
all_keys.distinct(lambda row:row[0])