Java 如何运行多个Spark Cassandra查询

Java 如何运行多个Spark Cassandra查询,java,apache-spark,spark-cassandra-connector,Java,Apache Spark,Spark Cassandra Connector,我需要在下面运行这样一个任务。不知怎的,我错过了一点。我知道,我不能像这样使用javasparkcontext并传递JavaFunction,因为存在序列化问题 我需要以cartesian.size()的大小运行多个cassandra查询。有什么建议吗 JavaSparkContext jsc = new JavaSparkContext(conf); JavaRDD<DateTime> dateTimeJavaRDD = jsc.parallelize(dateTimes)

我需要在下面运行这样一个任务。不知怎的,我错过了一点。我知道,我不能像这样使用javasparkcontext并传递JavaFunction,因为存在序列化问题

我需要以cartesian.size()的大小运行多个cassandra查询。有什么建议吗

JavaSparkContext jsc = new JavaSparkContext(conf);
    JavaRDD<DateTime> dateTimeJavaRDD = jsc.parallelize(dateTimes); //List<DateTime>
    JavaRDD<Integer> virtualPartitionJavaRDD = jsc.parallelize(virtualPartitions); //List<Integer>
    JavaPairRDD<DateTime, Integer> cartesian = dateTimeJavaRDD.cartesian(virtualPartitionJavaRDD);

    long c = cartesian.map(new Function<Tuple2<DateTime, Integer>, Long>() {
        @Override
        public Long call(Tuple2<DateTime, Integer> tuple2) throws Exception {
            return javaFunctions(jsc).cassandraTable("keyspace", "table").where("p1 = ? and  p2 = ?", tuple2._1(), tuple2._2()).count();
        }
    }).reduce((a,b) -> a + b);


    System.out.println("TOTAL ROW COUNT IS: " + c);
JavaSparkContext jsc=新的JavaSparkContext(conf);
javarddatetimejavardd=jsc.parallelize(dateTimes)//列表
JavaRDD virtualPartitionJavaRDD=jsc.parallelize(virtualPartitions)//列表
javapairdd cartesian=dateTimeJavaRDD.cartesian(virtualPartitionJavaRDD);
long c=cartesian.map(新函数(){
@凌驾
公共长调用(Tuple2 Tuple2)引发异常{
返回javaFunctions(jsc).cassandraTable(“键空间”,“表”)。其中(“p1=?和p2=?”,tuple2.\u 1(),tuple2.\u 2()).count();
}
}).减少((a,b)->a+b);
System.out.println(“总行数为:“+c”);

正确的解决方案应该是在数据和Casasndra表之间执行连接。这就是您所需要的——您只需生成包含
p1
&
p2
值的
Tuple2
的RDD,然后调用joinWithCassandra表,类似于这样(未测试,从我的示例中采用):

JavaRDD trdd=cartesian.map(新函数(){
@凌驾
公共Tuple2调用(Tuple2 Tuple2)引发异常{
返回新的Tuple2(Tuple2._1(),Tuple2._2());
}
});
木薯=
trdd.与CASSandratable(“测试”、“jtest”,
一些列(“p1”、“p2”)、一些列(“p1”、“p2”),
MapRowtoUple(Integer.class,String.class),mapTupleToRow(Integer.class));
//在这里进行计数。。。