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

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

相关推荐
꧁꫞꯭零꯭点꯭꫞꧂14 分钟前
G6绘制机柜 以及机柜设备的demo
前端·javascript·vue.js
C澒24 分钟前
供应链产研交付提效:前端多业务线新增样板间页面统计方案
前端·mr
可视之道27 分钟前
低代码可视化平台的前端架构设计:从渲染引擎到插件系统
前端
南城书生28 分钟前
Android Kotlin 协程原理分析
前端
Lee川32 分钟前
🚀 JavaScript 内存大揭秘:从“栈堆搬家”到“闭包时空胶囊”
前端·javascript·面试
唐叔在学习33 分钟前
TodoList应用:SPA应用首屏性能优化实践
前端·javascript·性能优化
恋猫de小郭33 分钟前
AI 时代的工程师需要具备什么能力?Augment Code 给出了他们的招聘标准
前端·人工智能·ai编程
kyriewen35 分钟前
别再滥用 iframe 了!这些场景下它其实是最优解
前端·javascript·html
Nile36 分钟前
解密openclaw底层pi-mono架构系列一:5. pi-web-ui
前端·ui·架构
郝学胜-神的一滴1 小时前
系统设计与面向对象设计:两大设计思想的深度剖析
java·前端·c++·ue5·软件工程