python - 为什么我的 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
解决方案
这意味着这个条件永远不会isinstance(str2, float)
为getSapellen
真,而这个条件str2.find("Sepal") != -1
fromgetSapellen2
至少为真一次。因此,type ofstr2
绝对不是float
,它是字符串,您可能希望将其转换为 float 或执行其他操作并返回 float 值。
推荐阅读
- flutter - 如何重复弹出所有屏幕,直到当前屏幕以外的堆栈中只剩下两个屏幕?
- bootstrap-4 - BOOTSTRAP 为什么不运行数据切换运行 çanta 链接?
- android - 需要 Android 服务 onBind?
- python - 如何从实例模板创建 Google Cloud Compute Instance
- iframe - Microsoft Edge 浏览器无法在 IFrame 中加载 Web 应用程序。收到此错误 - 此内容无法在框架中显示
- java - 使用 Java8 流过滤列表
- facebook - Facebook Messenger 中的切换协议
- python - 压缩这些循环的有效方法
- python - Python将本地值分配给导入模块中的属性
- mysql - 在 FROM 子句 MySql 8 中指定要更新的目标表