Искровое левое прямое соединение (вкл / выкл) дает разные результаты

#apache-spark #cassandra #spark-cassandra-connector

#apache-spark #кассандра #искра-кассандра-коннектор

Вопрос:

у нас разные размеры результирующего набора в зависимости от использования directJoin в нашем кластере spark cassandra:

//newpos — это фрейм данных, загруженный из cassandra

 val with_direct_join = new_pos.join(
    right
        .directJoin(AlwaysOn)
    ,
    Seq("a", "b", "c"),
    "left"
 

println(«(Прямое соединение): %d».формат (с_direct_join.count)); //12006 строк

тот же фрейм данных и соединение с directJoin (AlwayOff) имеют результирующий набор из //14705 строк

Есть идеи, почему это происходит? Directjoin в сочетании с левым соединением, похоже, каким-то образом ограничивает строки.

Спасибо, Фло

Комментарии:

1. сколько узлов в кластере C *, вы регулярно выполняете ремонт?

2. спасибо, Алекс, ты быстрый 🙂 На самом деле 3 узла, ремонт — насколько я знаю — установлен по умолчанию, что означает отсутствие ремонта, верно? , нужно спросить администратора C * сегодня, но это ведет меня в направлении, которого я не ожидал. Будет ли устаревшая реплика вести себя иначе в ситуации directjoin?

3. По умолчанию ремонт не выполняется… Прямое соединение просто выполняет запросы к отдельным разделам / первичным ключам и может также попадать в не восстановленные реплики, а поскольку по умолчанию используется LOCAL_ONE , вы можете получить устаревшие данные. Вы можете попытаться запустить свое приложение --conf spark.cassandra.input.consistency.level=ALL и повторить попытку — если у вас есть какие-либо несоответствия, оно будет исправлено во время чтения, хотя задание может завершиться неудачно из-за задержек с восстановлением данных

4. спасибо, Алекс, я свяжусь с администратором и разработчиками и дам вам знать