首页 > 解决方案 > 为什么我的 PySpark 函数 2 给出错误而函数 1 工作正常,从逻辑上讲,它们都在做同样的事情?有人可以帮我理解吗?

问题描述

我正在尝试编写 2 个函数来将 RDD 中的字符串数据转换为浮点格式,然后找到 iris 数据集的平均萼片长度。在 2 个功能中,一个工作正常,但第二个出现错误。有人可以帮我理解我在这里犯了什么错误吗

        is_float = lambda x: x.replace('.','',1).isdigit() and "." in x
        def getSapellen(str2):
            if isinstance(str2, float):
               return str2 
            attlist=str2.split(",")
            if is_float(attlist[0]):
               return float(attlist[0])
            else:
               return 0.0
        SepalLenAvg=irisRDD.reduce(lambda x,y: getSapellen(x) + getSapellen(y)) \
        /(irisRDD.count()-1)
        print(SepalLenAvg)

上面的代码块正在工作。我无法找出以下部分中的错误

        def getSapellen2(str2):
            if ( str2.find("Sepal") != -1):
                return str2
            attlist=str2.split(",")
            if isinstance(attlist[0],str):
                return float(attlist[0])
            else:
                return 0.0
        SepalLenAvg=irisRDD.reduce(lambda x,y: getSapellen2(x)+ getSapellen2(y)) \
        /(irisRDD.count()-1)
        print(SepalLenAvg)

在运行第二种方法时,我收到以下错误

TypeError:只能将str(不是“float”)连接到str

标签: pythonfunctionpysparktypesaction

解决方案


这意味着这个条件永远不会isinstance(str2, float)getSapellen真,而这个条件str2.find("Sepal") != -1fromgetSapellen2至少为真一次。因此,type ofstr2绝对不是float,它是字符串,您可能希望将其转换为 float 或执行其他操作并返回 float 值。


推荐阅读