我有一个元组的RDD。我想爆炸键值对并保留重复项。基本上是关键的x值。我想将这个RDD数组提供给LDA模型。我将在下面说明一些代码,提前谢谢你:
>>> rdd4.take(2)
[ [(u'11394071', 1), (u'11052103', 1), (u'11052101', 1)],
[(u'11847272', 2), (u'999999', 1), (u'11847272', 3)] ]
>>> rdd4.take(2)
[ ['11394071','11052103','11052101'],
['11847272', '11847272','999999','11847272','11847272','11847272'] ]
答案 0 :(得分:1)
不使用列表理解的解决方案,可能更清楚:
import itertools
orig_list = rdd4.take(2)
result = []
for orig_list_item in orig_list:
inner_result = []
for item, count in orig_list_item:
inner_result.append([item] * count)
inner_result = itertools.chain.from_iterable(inner_result)
inner_result = list(inner_result)
result.append(inner_result)
解释实际上与我的其他答案相同。
答案 1 :(得分:0)
脱离我的头顶
.map(lambda x: x[0])
不靠近有火花的机器
答案 2 :(得分:0)
import itertools
orig_list = rdd4.take(2)
result = [list(itertools.chain.from_iterable([[item] * count for item, count in orig_list_item]))
for orig_list_item in orig_list]
print result
的输出:
[['11394071', '11052103', '11052101'],
['11847272', '11847272', '999999', '11847272', '11847272', '11847272']]
解释:
它被称为(有点复杂)列表理解 - 从右边读取它:
for orig_list_item in orig_list
很明显,不是吗?在orig_list_item
中,每个orig_list
(本身就是一个列表),我们都会做同样的事情:
for item, count in orig_list_item
我们将解压缩每对中的各个部分(分别为它们指定item
和count
- 例如,对于第一对,它将是item == u'11394071'
,{{ 1}})。
现在我们创建此项目的列表
count == 1
并将重复[item]
次
count
不幸的是,我们将获得一个列表列表,从(第二个,更有趣的子列表)
[item] * count
所以我们需要将它们(连接)组合成一个简单的列表 - 导入的模数[['11847272', '11847272'], ['999999'], ['11847272', '11847272', '11847272']]
的函数(类方法)
itertools
将为我们制作。
但是 - 不幸的是 - 在itertools.chain.from_iterable()
的更高版本(我认为来自Python
)中的此功能会生成生成器,而不是列表 - 所以我们最后使用内置函数Python 2.7
来获得所需的列表。
答案 3 :(得分:0)
使用函数并保留RDD:
def explode_list(data):
inner_result = []
for item, count in data:
inner_result.append([item] * count)
flatten_result = [xx for yy in inner_result for xx in yy]
return flatten_result