gpt4 book ai didi

python - Lambda 函数导致 TypeError : 'int' object is not iterable

转载 作者:行者123 更新时间:2023-12-01 01:54:19 25 4
gpt4 key购买 nike

我刚刚开始学习Python。我正在使用 API 来构建 IDF 模型,但是我遇到了一些无法解决的 lambda 函数错误。这是生成 IDF 的类:

class Idfs(DocumentFrequencies, Model):

def build(self, corpus):
log.info('Counting documents in corpus...')
N = float(corpus.count())
dfs = super(Idfs, self).build(corpus)

log.info('Building idf model: N=%i', N)
return dfs\
.map(lambda (term, (df,rank)): (term, df))\
.mapValues(lambda df: math.log(N/df))

@staticmethod
def format_item((term, idf)):
return {
'_id': term,
'idf': idf,
}

这是计算 DF 的类:

class DocumentFrequencies(ModelBuilder):

def __init__(self, lowercase=False, max_ngram=1, min_df=2):
self.lowercase = lowercase
self.max_ngram = max_ngram
self.min_df = min_df

def build(self, docs):
m = docs.map(lambda d: d['text'])
if self.lowercase:
m = m.map(lambda text: text.lower())

return m\
.flatMap(lambda text: set(ngrams(text, self.max_ngram)))\
.map(lambda t: (t, 1))\
.reduceByKey(add)\
.filter(lambda (k,v): v > self.min_df)

错误出现在这一行 .map(lambda (term, (df,rank)): (term, df))\ 中,这是错误消息:

TypeError: 'int' object is not iterable

这是我调用 DocumentFrequencies.collect() 时得到的结果:

Out[5]:                                                                         
[(u'fawn', 3),
(u'1,800', 31),
(u'clotted', 3),
(u'comically', 11),
(u'Adjusting', 3),
(u'O(log', 6),
(u'unnecessarily', 15),
(u'evangelical', 53),
(u'naturopathic', 3),
(u'grenadiers', 4),
(u'stipulate', 4),
(u'Vikrant', 3),
(u'fractal', 18),

我不知道到底是哪个参数导致了错误。我使用的是 python 2.7、8 GB 1600 MHz DDR、2 核。这些是 pyspark 配置:

conf = pyspark.SparkConf().setAll([('spark.executor.memory', '8g'),('spark.driver.memory','8g'),('spark.network.timeout','100000000s'),('spark.executor.heartbeatInterval','10000000s'),('spark.driver.maxResultSize','8g'),('spark.driver.cores','2')])

提前致谢,

最佳答案

基于DocumentFrequencies.collect()输出,

map(lambda (term, (df,rank)): (term, df))

不应该存在。基本上它试图将给定的元组 (u'fawn', 3) 转换为两部分。 u'fawn' 映射到 term3 映射到 (df,rank)。由于整数3无法转换为元组(可迭代),因此错误消息

TypeError: 'int' object is not iterable

删除这一行不会改变 dfs 中的任何内容。

关于python - Lambda 函数导致 TypeError : 'int' object is not iterable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50386955/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com