我正在使用Spark插入cassandra。
CassandraJavaUtil.javaFunctions(newRDD)
.writerBuilder("dmp", "dmp_user_user_profile_spark1", mapToRow(UserSetGet.class)).saveToCassandra();
logger.info("DataSaved");
我的问题是RDD是否有5k行,并且由于某种原因插入Cassandra时作业失败。
对于从5k
插入的行,是否会回滚如果没有,我怎么知道实际插入了多少行,这样我就可以从失败的行再次开始我的工作。
答案 0 :(得分:1)
简单回答,不,不会有自动回滚。
无论什么数据火花能够保存到cassandra中,都会持续存在于cassandra中。
不,没有简单的方法可以知道什么数据集,火花作业能够成功保存。事实上,只有我能想到的方法是,从cassandra中读取数据,根据键从结果集中加入和过滤掉。
说实话,如果数据庞大,那么这似乎是非常大的开销。在大多数情况下,您只需在spark上重新运行作业,然后再将其保存到cassandra表中。 因为,在cassandra更新和插入工作方式相同。这不会是个问题。
如果您正在处理计数器表,那么只有这可能有问题。
更新: 对于此特定方案,您可以将rdd拆分为大小的批次,然后尝试保存它们。 这样,如果你在一个rdd失败,你就会知道哪个rdd失败了。如果不是那样,你应该可以从下一个rdd拿起来。