当前位置: 首页 > 知识库问答 >
问题:

pyspark:TypeError:“浮点数”对象不可迭代

奚光霁
2023-03-14

我正在编写火花代码,我总是出错:

TypeError: 'float' object is not iterable

reduceByKey() 函数的行上。有人可以帮助我吗?这是错误的堆栈跟踪:

d[k] = comb(d[k], v) if k in d else creator(v)
  File "/home/hw/SC/SC_spark.py", line 535, in <lambda>
TypeError: 'float' object is not iterable

这是代码:

def field_valid(m):
    dis=m[1]
    TxP=m[2]
    ef=m[3]
    pl=m[4]
    if TxP != 'NaN' and disl != 'NaN' and ef !='NaN' and pl != 'NaN':
        return True
    else:
        return False

def parse_input(d):
    #d=data.split(',')

    s_name='S'+d[6] # serving cell name

    if d[2] =='NaN' or d[2] == '':
        ef='NaN'
    else:
        ef=float(d[2].strip().rstrip())

    if d[7] =='NaN' or d[7] == '' or d[7] == '0':
        TxP='NaN'
    else:
        TxP=float(d[7].strip().rstrip())

    if d[9] =='NaN' or d[9] == '':
        dis='NaN'
    else:
        dis=float(d[9].strip().rstrip())

    if d[10] =='NaN' or d[10] == '':
        pl='NaN'
    else:
        pl=float(d[10].strip().rstrip())

return s_name,dis, TxP, ef, pl


sc=SparkContext(appName="SC_spark")
lines=sc.textFile(ip_file)
lines=lines.map(lambda m: (m.split(",")))
lines=lines.filter(lambda m: (m[6] != 'cell_name'))
my_rdd=lines.map(parse_input).filter(lambda m: (field_valid(m)==True))
my_rdd=my_rdd.map(lambda x: (x[0],(x[1],x[2])))                                                                                                                                          
my_rdd=my_rdd.reduceByKey(lambda x,y:(max(x[0],y[0]),sum(x[1],y[1])))  #this line got error

以下是一些示例数据:


Class,PB,EF,RP,RQ,ID,cell_name,TxP,BW,DIS,PL,geom
NaN,10,5110,-78.0,-7.0,134381669,S417|134381669|5110,62.78151250383644,10,2578.5795095469166,113.0,NaN
NaN,10,5110,-71.0,-6.599999904632568,134381669,S417|134381669|5110,62.78151250383644,10,2689.630258510342,106.0,NaN
NaN,10,5110,-77.0,-7.300000190734863,134381669,S417|134381669|5110,62.78151250383644,10,2907.8184899249713,112.0,19.299999999999983
NaN,10,5110,-91.0,-11.0,134381669,S417|134381669|5110,62.78151250383644,10,2779.96762695867,126.0,5.799999999999997
NaN,10,5110,-90.0,-12.69999980926514,134381669,S417|134381669|5110,62.78151250383644,10,2749.8351648579583,125.0,9.599999999999994
NaN,10,5110,-95.0,-13.80000019073486,134381669,S417|134381669|5110,62.78151250383644,10,2942.7938902934643,130.0,-2.4000000000000057
NaN,10,5110,-70.0,-7.099999904632568,134381669,S417|134381669|5110,62.78151250383644,10,3151.930706017461,105.0,22.69999999999999

共有1个答案

丁阳炎
2023-03-14

预期结果是值的总和和最大值

在这种情况下,您需要查找x[1]y[1],而不是使用内置的sum()函数。

my_rdd.reduceByKey( lambda x,y: ( max(x[0],y[0]), x[1] + y[1] ) )
 类似资料:
  • 问题内容: 我正在尝试迭代由numpy.linspace生成的值的数组: 这段代码在我的办公室计算机上工作正常,但是今天早上我坐下来在另一台机器上在家工作,出现了此错误: 只是一个浮点数数组,脚本在打印内容时没有问题-只是显然对它们进行了迭代。关于导致它损坏的原因的任何建议以及可能的解决方法? 问题答案: 给您一维NumPy数组。例如: 因此: 无法工作。您将需要某种二维数组,在第二维中具有两个元

  • 问题内容: 我正在尝试运行一个for循环。这是我遇到问题的代码部分: 因此,我的目的是遍历aldurstengd_ororka,对于字典中的每个“年龄”元组,我为元组中的每个“项目”运行另一个for循环。我得到的错误是 TypeError:“ int”对象不可迭代 问题答案: 如果是字典,则此表达式: 是一个错误。也许您的意思是: 编辑:您看到的错误是非常有趣的,我确实使用此代码段重现了它: 代码

  • 问题内容: 我的问题与python中的sum函数有关。 所以我的代码是 我读到一个错误: 有人可以解释为什么会发生这种情况以及如何解决吗? 问题答案: 查看文档: sum(iterable [,开始]) 总和从左到右依次迭代一个项目,并返回总计。start默认为。可迭代项通常是数字,并且起始值不允许为字符串。 因此,您必须传递一个可迭代的参数,而不是整数! 应该可以正常工作。 此功能旨在在列表中存

  • 问题内容: 运行以下代码时,出现此错误“主循环’builtin_function_or_method’对象不可迭代”: 我有搜索stackoverflow,但是找不到我的问题的答案… 我检查了错别字,但找不到任何错误。请帮我! 问题答案: 直接回答 在这里的代码中: 更改为。 如果您想进一步了解此错误,请阅读以下内容: 调试时,最好删除try … except块,尤其是“ expect Excep

  • 问题内容: …引发错误: 我想通过将每个数字相加来找出总数,例如110。1 + 1 + 0 =2。我该怎么做? 谢谢 问题答案: 首先,不要再调用-您正在将字符串转换为整数,这不是您想要的(您希望将每个字符视为自己的数字)。更改: 至: 现在这是一个数字字符串,您可以逐个数字地对其进行循环。 接下来,将一些初始值分配给-就像您现在的代码一样,由于您从未初始化它,因此将获得一个。大概您想在循环之前。

  • 可迭代(Iterable) 对象是数组的泛化。这个概念是说任何对象都可以被定制为可在 for..of 循环中使用的对象。 数组是可迭代的。但不仅仅是数组。很多其他内建对象也都是可迭代的。例如字符串也是可迭代的。 如果从技术上讲,对象不是数组,而是表示某物的集合(列表,集合),for..of 是一个能够遍历它的很好的语法,因此,让我们来看看如何使其发挥作用。 Symbol.iterator 通过自己

  • 问题内容: 我正在尝试从Wikipedia主页提取所有链接,但是此代码显示TypeError:“ WebElement”对象不是可迭代的错误。 问题答案: 问题是您正在使用哪个仅返回一个WebElement(不可迭代),即返回一个WebElement列表。 解决方案:替换为 参考:Selenium-Python文档