rdd不能嵌套rdd

本文探讨了在Spark中,RDD(弹性分布式数据集)不允许嵌套的问题。出现`py4j.Py4JException`或`Py4JError`通常是由于尝试在RDD操作内部使用另一个RDD导致的。这种做法违反了RDD的设计原则,应当避免。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

df_all.show()
a = [(1,df_all)]
rdd = sc.parallelize(a)

报错
Py4JError: An error occurred while calling o131.__getnewargs__. Trace:
py4j.Py4JException: Method __getnewargs__([]) does not exist
at py4j.reflection.ReflectionEngine.getMethod(ReflectionEngine.java:335)
at py4j.reflection.ReflectionEngine.getMethod(ReflectionEngine.java:344)
at py4j.Gateway.invoke(Gateway.java:252)
at py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:133)
at py4j.commands.CallCommand.execute(CallCommand.java:79)
at py4j.GatewayConnection.run(GatewayConnection.java:209)
at java.lang.Thread.run(Thread.java:745)

错误原因:rdd不能嵌套rdd

RDD嵌套是不被支持的,也即不能在一个RDD操作的内部再使用RDD。

这是因为并行式函数将以闭包的形式发送至各个worker。若并行式函数使用了rdd的引用,spark将会把当前rdd对象闭包给worker.然而,对rdd对象的执行只能由driver进行,worker并不能执行,所以会导致错误。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值