为什么spark map函数中的代码仍然被缓存,即使其中引用的类发生了变化?

xwmevbvl  于 2021-07-12  发布在  Spark
关注(0)|答案(1)|浏览(285)

我在独立模式下使用spark 2.4.5和java 8,并将csv文件转换为spark数据集,如下所示:

sparkSession.read().csv("foo.csv").map((MapFunction<Row, MyBean>) row -> {
  MyBean bean = new MyBean();
  bean.setFoo(row.getAs("foo"));
  bean.setBar(row.getAs("bar"));
  return bean;
}, Encoders.bean(MyBean.class));

这个 MyBean 类包含一些用lombok生成的代码,这些代码是在另一个java项目中定义的,该项目在我的本地maven artifactory中可用。现在我改变了一些不相关的东西 MyBean 同学们,跑 mvn install 突然我有了一个 NoSuchMethodError : setFoo 未定义。
我怀疑lombok生成的代码有问题,所以我对它进行了修改,但似乎什么都不起作用,直到我删除了包含 setFoo 在map函数中。奇怪,所以其他的二传手都没事,只有这一个不见了?所以我补充说 setFoo 再次,期待它失败,但令人惊讶的是,它的工作。
对我来说,似乎在这个map函数中一定有某种代码的缓存,当 MyBean 类改变了,Lombok山重新排列了所有的函数。通过更改map函数中的一些代码,我使缓存失效,从而修复了它。但是这个缓存是从哪里来的呢?spark是否在map函数中缓存代码?intellij在这么做吗?我真的需要能够测试的代码,我的工作,而不是一些旧的缓存版本。

w1e3prcc

w1e3prcc1#

你应该考虑一下 -U 执行以下操作时的选项 mvn install 命令。所以你想要的命令是 mvn install -U ```
-U,--update-snapshots Forces a check for missing
releases and updated snapshots on
remote repositories

很久以前我也遇到过这个问题,当您更改另一个存储库中的代码时,它会在当前存储库中产生问题,一段时间后(通过使缓存无效并重新启动选项),它就会开始正常工作。
在我开始使用上面的选项 `mvn` ,直到现在我还没有面对这个问题。

相关问题