为简单起见,假设我有一个仅由两行组成的小语料库。
'This is first'
'This is second'
为了将其用于我的reduceByKey spark方法,我需要具有以下输出:
[((u'This', u'is'), 1), ((u'is', u'first.'), 1), ((u'This', u'is'), 1), ((u'is', u'second.'), 1)]
但是使用我在下面编写的代码,我采用了以下格式(更多列表)。检查我的愿望解决方案是否在一个“列表”中,但我得到的输出更多(取决于我每句话的单词数)
[[((u'This', u'is'), 1), ((u'This', u'first.'), 1)], [((u'is', u'first.'), 1)], [((u'This', u'is'), 1), ((u'This', u'second.'), 1)], [((u'is', u'second.'), 1)]]
如何修改它以获得我想要的东西。
couples = lines.map(lambda s : s.split(" ")).flatMap(lambda s: [[((s[i],s[j]), 1) for j in range(i+1 , len(s))] for i in range(len(s)-1) ])
万一某人不了解pyspark但好Python,我想修改此部分:
lambda s: [[((s[i],s[j]), 1) for j in range(i+1 , len(s))] for i in range(len(s)-1) ]
预先感谢
答案 0 :(得分:0)
在python中,没有诸如返回值扩展之类的东西。这意味着您需要显式写出您的返回值。这意味着lambda必须返回一个列表。列表变平必须在外部进行。它可以以不同的方式实现。例如,
reduce(lambda a,b: a+b, lines.map(...).flatMap(...))