Spark Cassandra пишет Dataframe, как найти, какие ключи уже существуют в базе данных при вставке - PullRequest
1 голос
/ 01 ноября 2019

Я написал следующий метод 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");
    }
}

1 Ответ

1 голос
/ 01 ноября 2019

В Кассандре все в порядке - нет различия между вставками и обновлениями. Cassandra не проверяет, существуют ли данные при вставке или обновлении (кроме LWT) - она ​​просто добавляет данные, а предыдущие копии удаляются во время сжатия.

Единственный способ выполнить вашу задачу - загрузить данныеиз таблицы - с помощью Dataframe API это будет сделано на уровне Spark путем считывания всей таблицы в Dataframe с последующим объединением или в RDD API с помощью joinWithCassandra или leftJoinWithCassandra (см. doc ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...