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並不能執行,所以會導致錯誤。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章