Python 如何使用pyspark为非成对DDS正确设置groupByKey
我是Python新手。我也是pysaprk的新手。我正在尝试运行一个代码,它使用一个元组的元组,看起来像这样执行Python 如何使用pyspark为非成对DDS正确设置groupByKey,python,python-2.7,hadoop,pyspark,rdd,Python,Python 2.7,Hadoop,Pyspark,Rdd,我是Python新手。我也是pysaprk的新手。我正在尝试运行一个代码,它使用一个元组的元组,看起来像这样执行.map(lambda(id,(span,text)):(id,text)) 我使用的代码是: m = text\ .map(lambda (id, (span, text)): (id, text))\ .mapValues(lambda v: ngrams(v, self.max_ngram))\'''error triggered
.map(lambda(id,(span,text)):(id,text))
我使用的代码是:
m = text\
.map(lambda (id, (span, text)): (id, text))\
.mapValues(lambda v: ngrams(v, self.max_ngram))\'''error triggered here'''
.flatMap(lambda (target, tokens): (((target, t), 1) for t in tokens))\
这是原始数据的格式化方式(id、源、跨度、文本):
我得到这个错误:
for k, v in iterator:
TypeError: tuple indices must be integers, not str
我知道groupByKey在pairwiseRDDs上工作,所以我想知道如何正确执行groupByKey来解决这个问题
任何帮助或指导都将不胜感激
我正在使用Python2.7和pyspark 2.3.0
提前感谢。首先,您需要将数据映射到具有键和值的表单中,然后 键和值形式始终是一个元组(A,b),其中键是A和值b。a和b本身可能是元组
rdd = sc.parallelize([{'_id': u'en.wikipedia.org/wiki/Cerambycidae',
'source': 'en.wikipedia.org/wiki/Plinthocoelium_virens',
'span': (61, 73),
'text': u'"Plinthocoelium virens" is a species of beetle in the family Cerambycidae.'},
{'_id': u'en.wikipedia.org/wiki/Dru_Drury',
'source': 'en.wikipedia.org/wiki/Plinthocoelium_virens',
'span': (20, 29),
'text': u'It was described by Dru Drury in 1770.'},
{'_id': u'en.wikipedia.org/wiki/Dru_Drury',
'source': 'en.wikipedia.org/wiki/Plinthocoelium_virens2',
'span': (20, 29, 2),
'text': u'It was described by Dru Drury in 1770.2'}])
print rdd.map(lambda x: (x["_id"], (x["span"], x["text"]))).groupByKey()\
.map(lambda x: (x[0], list(x[1]))).collect()
[(u'en.wikipedia.org/wiki/Dru_Drury',[(20,29),有人对它进行了描述
1770年由德鲁德鲁里(Dru Drury)所写,((20,29,2),由德鲁德鲁里(Dru Drury)所描述
在1770.2']),(u'en.wikipedia.org/wiki/Cerambycidae',[(61,73),
u’s“Plinthocoelium virens”是该科的一种甲虫
天牛科。')]]
谢谢,但是它在执行ngram的下一行中导致了一个新的错误(我编辑了这个问题以显示代码和错误),我不知道下一行需要什么格式。非常感谢你。我不明白你想做什么。为什么您需要使用groupByKey?您发布的代码有什么问题?@user3689574此代码是计算tfidf的第一部分。当ngram线路调用时,会导致上述错误。请让我知道我是否应该提供关于代码或错误的更多信息。上面显示的dict中的“提及”是否有行?@user3689574行是什么意思?它运行在pyspark上,所以要打印我所做的
提到的那篇文章。假设(2)
@user3689574我认为这已经转化为另一个问题,我是否应该编辑回问题并选择你的帖子作为答案,然后发布另一个问题?
rdd = sc.parallelize([{'_id': u'en.wikipedia.org/wiki/Cerambycidae',
'source': 'en.wikipedia.org/wiki/Plinthocoelium_virens',
'span': (61, 73),
'text': u'"Plinthocoelium virens" is a species of beetle in the family Cerambycidae.'},
{'_id': u'en.wikipedia.org/wiki/Dru_Drury',
'source': 'en.wikipedia.org/wiki/Plinthocoelium_virens',
'span': (20, 29),
'text': u'It was described by Dru Drury in 1770.'},
{'_id': u'en.wikipedia.org/wiki/Dru_Drury',
'source': 'en.wikipedia.org/wiki/Plinthocoelium_virens2',
'span': (20, 29, 2),
'text': u'It was described by Dru Drury in 1770.2'}])
print rdd.map(lambda x: (x["_id"], (x["span"], x["text"]))).groupByKey()\
.map(lambda x: (x[0], list(x[1]))).collect()