spark中使用flatmap报错:TypeError: ‘int‘ object is not subscriptable

1、背景描述

菜鸟笔者在运行下面代码时发生了报错:

python 复制代码
from pyspark import SparkContext

sc = SparkContext("local", "apple1012")

rdd = sc.parallelize([[1, 2], 3, [7, 5, 6]])

rdd1 = rdd.flatMap(lambda x: x)
print(rdd1.collect())

报错描述如下:

2、报错原因

显然这是传入的数据类型发生了错误:

因为我们试图对整数对象执行下标操作,而这是不允许的。

原来flatMap底层通过取下标来展开元素 如果rdd集合里面有非可迭代对象(如int元素)则会报错TypeError: 'int' object is not subscriptable。

查看flatmap算子源码我们知道,传入的参数被要求是一个可迭代对象,那么rdd集合中有int元素报错也就不奇怪了。

3、解决方案

解决方法如下:

我们可以在映射函数内部处理这种情况。例如,如果要返回单个元素,可以将其放入一个列表中,以确保总是返回一个可迭代对象。

python 复制代码
from pyspark import SparkContext

sc = SparkContext("local", "apple1012")

rdd = sc.parallelize([[1, 2], 3, [7, 5, 6]])

# flatMap底层通过取下标来展开元素 如果rdd集合里面有非可迭代对象(如int元素)则会报错TypeError: 'int' object is not subscriptable


def my_flatmap(x):
    if isinstance(x, int):
        # 如果是整数,将其放入一个列表中
        return [x]
    else:
        # 如果不是整数,直接返回可迭代对象
        return x


rdd1 = rdd.flatMap(my_flatmap)
print(rdd1.collect())

修改代码后我们运行程序,完美执行:

相关推荐
广州智造36 分钟前
Radioss复合材料使用的单元属性
前端·设计·cad·建模·cae·radioss
张宏宇1 小时前
我把微软开源的 tgrep 做成了本地版 GitHub Code Search:45,629 个文件里搜一次 10ms
前端·后端
huakoh1 小时前
MCP 调用超时后别急着重试:三步读回分清执行状态
前端
打工仔折腾 AI1 小时前
把模型切换交给平台:用蓝耘智能路由搭建商品评论分析工具
java·服务器·前端·后端·python·性能优化·ai agent 实战
不可能片场1 小时前
Electron 发布标题的冒号 击穿命令行解析
前端·electron
500841 小时前
React Native for OpenHarmony 实战:三方库 react-native-crypto-js 的鸿蒙化适配指南
javascript·react native·性能优化·electron·harmonyos
reeswell1 小时前
我开源了 inspect-devtools —— 让 AI 终于能"看见"你屏幕上的组件
前端·人工智能
Yuhano2 小时前
W3. 实现Agent工具调用引擎
前端·aigc·ai编程
flash俊杰2 小时前
第三节 基于 Vue 3 的领域模型架构——Schema 驱动的低代码后台实战
前端
热爱2332 小时前
dsh里使用chatgpt plus或pro会员而不是apikey,其实很简单。
前端·openai