gpt4 book ai didi

java - 将 RDD 的值映射到它们的字典值

转载 作者:行者123 更新时间:2023-11-29 04:31:33 27 4
gpt4 key购买 nike

我有这段代码:

List tmp = colRDD.collect();
int ctr = 0;
for(Object o : tmp){
if (!dictionary.containsKey(o)) {
dictionary.put(o, ctr++);
}
}
revDictionary = dictionary.entrySet().stream()
.collect(Collectors.toMap(Entry::getValue, c -> c.getKey()));
colRDD = colRDD.map(x -> {return dictionary.get(x);});

一开始,我具体化了 RDD 并将每个值放入一个哈希表中,其中 RDD 值是键。然后,我只是想将 RDD 中的每个值映射到它们的字典值。但是,我收到一个 Task not serializable 错误。这是为什么?

最佳答案

这将是由于试图从执行程序评估的代码中访问驱动程序范围内的变量引起的。

根据您的示例代码,最有可能的罪魁祸首是这行代码中的 dictionary:

colRDD = colRDD.map(x ->  {return dictionary.get(x);});

但是,问题也可能出在您的代码中比您在此处提供的代码更靠前的位置,因此您可能也需要检查一下。

这是因为 dictionary 驻留在您的驱动程序的内存中,它很可能在与您的执行程序不同的 JVM 实例中运行。您传递给 colRDD.map 的 lambda 由执行程序计算,而不是驱动程序。函数被序列化为要执行的任务,发送给执行器运行。但是由于 dictionary 周围的“闭包”,Spark 引擎无法序列化任务,因此出现异常。

关于java - 将 RDD 的值映射到它们的字典值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43614227/

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