spark报错:Cannot overwrite a path that is also being read from.

Cannot overwrite a path that is also being read from.

这个错看起来很简单。代码简化为

Dataset<Row> selectBefore = session.sql("select * from table1")

Dataset<Row> dataset2 = session.createDataset(list,xx.class)

大概就是获取表里的原始数据,然后从别的地方搞来的新数据两个合起来继续存到表里去

selectBefore 
.union(dataset)
.write()
.mode(SaveMode.Overwrite)
.format("hive")
.insertInto(Constant.ORDERONLINE_TABLE);

为啥不用append 因为有时候会重复调用。。 反正就是这么个情况。就是要先查再插入。

为什么报错?

解决办法

第一个解决办法真不行。我查了下这两个参数大多是解决spark读取hive表数据量不对的情况用的。而且我设置之后还有报错就不贴出来了

第二个 确实可以。

session.sparkContext().setCheckpointDir("/tmp/spark/job/OrderOnlineSparkJob");

Dataset<Row> selectBefore = session.sql("select * from table1").checkpoint();

第三个这种lowb方法就不说了

找个时间好好学习下spark的checkpoint知识。

经验分享 程序员 微信小程序 职场和发展