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())

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

相关推荐
涛涛ing2 分钟前
2026年9月,前端圈同时发生了四件事,指向同一个方向
前端
艾伦野鸽ggg15 分钟前
Vue2 模板语法与样式绑定
前端
Amos_Web15 分钟前
Rspack 源码解析(十一):资产 Hook 与增量构建
前端·rust·源码阅读
PC2005_cloud15 分钟前
Windows 数据使用量页面卡死:1097 个热点档案和 161 MB 的 SRUM 库
前端·后端
烈风逍遥17 分钟前
AI大模型中fetch 和 ReadableStream为啥一起出现
前端·人工智能
PC2005_cloud27 分钟前
Nginx 防盗链配置实战:用 referer 模块保护网站静态资源
前端·后端
福兮说27 分钟前
Canvas 文字排版:measureText 量出来的宽度为什么总是不对
前端·javascript
夏幻灵34 分钟前
从零理解 Redux:从 state、action、reducer 到 Redux Toolkit 与异步请求
前端
烈风逍遥41 分钟前
第四篇:AI 模块架构设计:多 Provider 切换、RAG 知识库与 Agent 编排
前端·后端·架构
用户80806181436931 小时前
JavaScript 面向对象入门到精通
前端·javascript