Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用pyspark为非成对DDS正确设置groupByKey_Python_Python 2.7_Hadoop_Pyspark_Rdd - Fatal编程技术网

Python 如何使用pyspark为非成对DDS正确设置groupByKey

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

我是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 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()