rdd演算子でrddの参照は使えますか?


rdd演算子で呼び出されたクライアント関数には、rddリファレンスの形式は絶対に発生しません.そうしないと、javaという深刻なエラーが発生します.lang.ClassCastException: org.apache.spark.MapOutputTrackerWorker cannot be cast to org.apache.spark.MapOutputTrackerMaster
sparkによるとtrasactionではネストできません.これは、クライアント関数が各workerに閉パケットで送信されるためです.クライアント関数がrddの参照(特に現在のrddの参照)を使用すると、sparkは現在のrddオブジェクトをworkerにクローズドします.ただし、rddオブジェクトの実行はdriverのみで行い、workerは実行できないため、エラーが発生します.
val r1 = r0.zipWithUniqueId()
val r2 = r1.filter(_._2 / r1.partitions.length)

2番目のfilter演算子のクライアント関数はr 1を参照しており、1つのInt型のパーティション数を使用してもエラーが発生します.現在の状況はspark 1である.4は通過できるがspark 1である.6エラーですspark 1.6この原則の問題の上で処理するのは更に厳粛です!
処理方法は、rddリファレンスを削除し、ローカルデータ構造を使用して代替します.
val r1 = r0.zipWithUniqueId()
val partitionSize = r1.partitions.length
val r2 = r1.filter(_._2 / partitionSize )