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

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

相关推荐
文心快码BaiduComate9 分钟前
Comate AI IDE三大能力升级:支持语音输入& AI可操作浏览器 & Figma设计与代码双向转换
前端·后端·程序员
coder_Eight21 分钟前
LRU 缓存实现详解:双向链表 + 哈希表
前端·算法
1024小神26 分钟前
kotlin安卓项目配置app横屏等方式
前端
Cxiaomu29 分钟前
React + Node.js 实战:用豆包端到端实时语音大模型 API 落地web纯语音助手
前端·react.js·node.js
Electrolux30 分钟前
2026年了,你敢信一些知名的开源库都还不会正确使用防抖节流吗
前端
Beginner x_u32 分钟前
前端八股整理|JavaScript|高频小题 01
开发语言·前端·javascript
Flutter笔记33 分钟前
如何在本地跑 Core ML 模型识别呼噜声,并用 iCloud 优雅同步?
前端·人工智能·程序员
Greg_Zhong34 分钟前
前端测试的学习阶段,由基础到进阶的过程认识.....
前端·前端、专业测试结合
Mr Xu_40 分钟前
Vue3 + Leaflet实战:深入解析MarkerCluster点位聚合插件的使用与优化
前端·javascript·vue.js
D_C_tyu1 小时前
Vue + Leaflet 实现地图任意点位点击查看时间功能
前端·javascript·vue.js