Соединитель искры Кассандры

Моя cassandra CF имеет дату и идентификатор в качестве ключа раздела. при запросе я знаю только дату, поэтому я перебираю диапазон идентификаторов.

Мой вопрос вращается вокруг того, как соединитель выполняет следующий код.

Код SparkDriver выглядит так:

SparkConf conf = new SparkConf().setAppName("DemoApp")
.conf.setMaster("local[*]")
.set("spark.cassandra.connection.host", "10.*.*.*")
.set("spark.cassandra.connection.port", "*");

JavaSparkContext sc = new JavaSparkContext(conf);
SparkContextJavaFunctions javaFunctions = CassandraJavaUtil.javaFunctions(sc);

String date = "23012017";

for(String id : idlist) {

JavaRDD<CassandraRow> cassandraRowsRDD = 

javaFunctions.cassandraTable("datakeyspace", "sample2")
            .where("date = ?",date)
            .where("id = ? ", id)
            .select("data");

 cassandraRowsRDDList.add(cassandraRowsRDD);
}

List<CassandraRow> collectAllRows = new ArrayList<CassandraRow>();
        for(JavaRDD<CassandraRow> rdd : cassandraRowsRDDList){
            //do transformations

            collectAllRows.addAll(rdd.collect());
    }

1) Прежде всего, я хотел спросить, если я перебираю список idlist, скажем, idlist имеет 1000 элементов, которые могут когда-либо увеличиваться, будет ли это эффективно? как каждый запрос на выборку распределяется в кластере? Особенно, как будут поддерживаться соединения Cassandra DB?

2) В моей программе-драйвере. После цикла я помещаю все строки в список, а затем применяю преобразования к каждой строке и отфильтровываю дубликаты. Будет ли это также распространяться искрой на кластер или это будет происходить со стороны водителя.

Пожалуйста, помогите.!




Ответы (1)


Есть лучший способ сделать это с помощью разъема spark cassandra. вы можете создать rdd (дата, идентификатор), а затем вызвать функцию joinWithCassandraTable для даты и идентификатора столбцов. Соединитель делает это разумно, все данные будут извлекаться только рабочими, и это тоже без перетасовки, то есть каждый рабочий будет извлекать данные только для даты и идентификатора, которые у него есть.

person deenbandhu    schedule 22.12.2016