gpt4 book ai didi

java - 为什么我在这里收到 NotSerializedException?

转载 作者:行者123 更新时间:2023-12-02 05:10:18 25 4
gpt4 key购买 nike

我尝试在 Spark 中跨 JavaRDD 映射函数,但在 map 调用中不断收到 NotSerializedError 错误。

public class SparkPrunedSet extends AbstractSparkSet {

private final ColumnPruner pruner;

public SparkPrunedSet(@JsonProperty("parent") SparkSet parent, @JsonProperty("pruner") ColumnPruner pruner) {
super(parent);
this.pruner = pruner;
}

public JavaRDD<Record> getRdd(SparkContext context) {
JavaRDD<Record> rdd = getParent().getRdd(context);
Function<Record, Record> mappingFunction = makeRecordTransformer(pruner);

//The line below throws the error
JavaRDD<Record> mappedRdd = rdd.map(mappingFunction);
return mappedRdd;
}

private Function<Record, Record> makeRecordTransformer() {
return new Function<Record, Record>() {

private static final long serialVersionUID = 1L;

@Override
public Record call(Record record) throws Exception {
// Obviously i'd like to do something more useful in here, but this is enough
// to throw the error
return record;
}
};
}
}

当它运行时,我得到:java.io.NotSerializedException:com.package.SparkPrunedSet

Record 是一个实现可序列化的接口(interface),MapRecord 是它的实现。与此类似的代码存在并在代码库中工作,只不过它使用 rdd.filter 代替。我已经阅读了大多数其他堆栈溢出条目,但它们似乎都没有帮助。我认为这可能与序列化 SparkPrunedSet 的问题有关(尽管我不明白为什么它甚至需要这样做),所以我将其上的所有字段设置为 transient,但这也没有帮助。有人有什么想法吗?

最佳答案

您为转换创建的Function实际上是SparkPrunedSet的(匿名)内部类。因此,该函数的每个实例都有一个对创建它的 SparkPrunedSet 对象的隐式引用。

因此,对其进行序列化将需要对 SparkPrunedSet 进行序列化。

关于java - 为什么我在这里收到 NotSerializedException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27385980/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com