私はいくつかのオブジェクトをapache sparkのパーティション間で共有します。以下は、私が直面しているコードスニペットと問題です。SparkでJavaRDDパーティション間でデータを共有する方法は?
private static void processDataWithResult() throws IOException {
JavaRDD<Long> idRDD = createIdRDDUsingDb();
final MeasureReportingData measureReporingData = getMeasureReportingData(jobConfiguration);
resultRDD = idRDD.mapPartitions(new FlatMapFunction<Iterator<Long>, Boolean>() {
@Override
public Iterable<Boolean> call(Iterator<Long> idIterator) throws Exception {
MeasureReportingData mrd = measureReporingData;
final List<Boolean> dummyList = new ArrayList<>();
long minId = idIterator.next();
engine.processInBatch(minId, minId + BATCH_SIZE - 1);
return (Iterable<Boolean>) dummyList;
}
});
resultRDD.count();
}
measureReportingData
オブジェクトをすべてのパーティションに配布したいですか?
MeasureReportingData
にはSerializable
ではないインスタンスメンバーが含まれているため、シリアル化エラーが発生します。問題のシミュレーションは、次の質問で指定します。How to serialize a Predicate<T> from Nashorn engine in java 8
measureReportingDataをパーティション間で共有する別の方法はありますか?
これは、シリアル化の方法です。私は、MeasureReportingDataがSerializableであればうまくいくことを知っています。私が直面している問題は、Nashornの述語をシリアライズするのリンクに記載されています。 –
Ajeetkumar
シリアライズ不可能なオブジェクトを共有することはできません。その周りに方法はありません。 – Dikei
@Dikeiあなたはいつも共有することはできませんが、その場で初期化することはできます。 – zero323