Я написал следующий метод JAVA для сохранения данных для нескольких POJO в базе данных Apache Cassandra через Apache Spark.
Это работает нормально, однако Spark не предоставляет никакой информации о том, были ли записи вставлены(ключи не существуют в Кассандре) или были обновлены (ключи уже существуют в БД).
Есть ли способ с минимальными затратами (я хотел бы избежать загрузки содержимого таблицы в информационный кадр и проверки на наличиедубликаты ключей), чтобы на момент вставки выяснить, какие записи уже существуют (имеют дубликаты ключей) в БД?
Точный код показан ниже:
@Service
public class WriteDB {
@Autowired
private SparkSession sparkSession;
Logger LOG = LoggerFactory.getLogger(WriteDB.class);
public <T> void uploadData(List<T> objects, Class<T> clazz, String keyspaceName, String tableName) {
LOG.info("Number of records to be committed to database: " + objects.size());
//Create dataset from entity object
Dataset<Row> df = sparkSession.createDataFrame(objects, clazz);
//Write data from spark dataframe to cassandra schema
df.write().mode(SaveMode.Append).format("org.apache.spark.sql.cassandra").options(new HashMap<String, String>() {{
put("keyspace", keyspaceName);
put("table", tableName);
}}).save();
LOG.info("Records Commited");
}
}