Моя 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) В моей программе-драйвере. После цикла я помещаю все строки в список, а затем применяю преобразования к каждой строке и отфильтровываю дубликаты. Будет ли это также распространяться искрой на кластер или это будет происходить со стороны водителя.
Пожалуйста, помогите.!