rdd不能嵌套rdd

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并不能执行,所以会导致错误。

你可能感兴趣的:(Spark)