PySpark RDD报错TypeError: tuple indices must be integers, not str求解
解决TypeError: tuple indices must be integers, not str的问题
这个错误的根源很清晰:你手里的mentions是字典组成的集合,但代码里的lambda (source, target, span, text)是在尝试把每个元素当成元组来做位置解构——字典根本不吃这一套,自然会抛出索引类型错误。
调整方案:从字典中提取对应字段
你需要把元组解构的逻辑改成从字典键中取值,对应你要的target和text:
target对应字典里的_id字段text对应字典里的text字段
修改后的build函数代码如下:
def build(self, mentions, idfs): m = mentions\ .map(lambda mention: (mention['_id'], mention['text']))\ # 从字典提取目标字段 .flatMapValues(lambda v: ngrams(v, self.max_ngram))\ .map(lambda v: (v, 1))\ .reduceByKey(add)
额外注意事项
如果你的mentions还是普通Python列表(不是Spark RDD),那得先把它转成RDD才能用PySpark的算子:
# 假设sc是你的SparkContext实例 mentions_rdd = sc.parallelize(mentions) # 再把mentions_rdd传入build函数 result = your_instance.build(mentions_rdd, idfs)
这样调整后,代码就能正确识别mentions里的字典结构,不会再抛出类型错误了。
内容的提问来源于stack exchange,提问作者user3446905
相关产品推荐
相关产品推荐

