我有一些对象在apache spark中的分区之间共享。下面是我正面临的代码片段和问题。
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?
答案 0 :(得分:1)
为了在机器之间共享数据,数据必须在源处序列化,通过网络传输,并在目标处进行反序列化。因此,您无法传输不可序列化的对象。
如果MeasureReportingData
不可序列化,则必须将其转换为可序列化对象,共享该对象,然后将其转换回函数内的MeasureReportingData
。