导致TypeError的Lambda函数:“int”对象不是iterab

2024-09-30 01:20:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我刚开始学Python。我正在使用一个API来构建一个IDFs模型,但是我在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的类:

^{pr2}$

错误出现在.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),

我不知道到底是哪个论点导致了这个错误。我使用的是python2.7,8gb1600mhzddr和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')])

提前谢谢你


Tags: lambdabuildselfinfologdfdefdriver
1条回答
网友
1楼 · 发布于 2024-09-30 01:20:41

基于DocumentFrequencies.collect()输出

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

不应该存在。基本上,它试图将给定的元组(u'fawn', 3)转换为两部分。u'fawn'映射到term,而{}映射到{}。由于整数3不能转换为元组(它是iterable),因此错误消息

^{pr2}$

删除此行不会更改dfs中的任何内容。在

相关问题 更多 >

    热门问题