如何知道在cassandra中使用Spark插入的行数

How to know no of rows Inserted using Spark In cassandra

我正在使用 Spark 插入到 cassandra 中。

CassandraJavaUtil.javaFunctions(newRDD)
            .writerBuilder("dmp", "dmp_user_user_profile_spark1", mapToRow(UserSetGet.class)).saveToCassandra();
            logger.info("DataSaved");

我的问题是 RDD 是否有 5k 行,并且由于某种原因插入 Cassandra 时作业失败。

从 5k 中插入的行是否会回滚

如果没有,我怎么知道实际插入了多少行,这样我就可以从失败的行重新开始我的工作。

简单回答,不会,不会自动回滚

无论 spark 能够保存到 cassandra 中的什么数据,都将持久保存到 cassandra 中。

不,没有简单的方法可以知道直到什么数据集,spark 作业才能成功保存。事实上,我唯一能想到的方法是,从 cassandra 读取数据,根据键从结果集中加入和过滤掉。

老实说,如果要进行大量连接,数据量很大,这似乎相当开销。在大多数情况下,您可以简单地在 spark 上重新 运行 作业,然后让它再次保存到 cassandra table。 因为,在 cassandra 中,更新和插入的工作方式相同。不会有问题的。

唯一可能有问题的地方是,如果您正在处理计数器 tables。

更新: 对于这种特定情况,您可以将您的 rdd 分成您的大小的批次,然后尝试保存它们。 这样,如果你在一个 rdd 上失败了,你就会知道是哪个 rdd 失败了。如果不是那个集合,你肯定可以从下一个 rdd 中获取。