无法在Spark中联合两个CassandraJavaRDD <cassandrarow>

时间:2016-03-07 13:12:25

标签: java apache-spark cassandra-2.0 spark-cassandra-connector

由于查询来自Cassandra的数据存在限制,我尝试使用Spark批量读取数据并将其存储在RDD中。

然后我使用union函数添加所有RDD。

这是我的代码。

private void getDataFromCassandra(JavaSparkContext sc) {


    CassandraJavaRDD<CassandraRow> cassandraRDD = null ;
    CassandraJavaRDD<CassandraRow> cassandraRDD2  = null;

    While(Some Condition)

     cassandraRDD = CassandraJavaUtil
                .javaFunctions(sc).cassandraTable("dmp", "table").select("abc", "xyz")
                .where("pid IN ('" + sb + "')");

    if(cassandraRDD2==null){


     cassandraRDD2=cassandraRDD;
    }
    else{
        cassandraRDD2 =  cassandraRDD2.union(cassandraRDD);
    }
}             

}

但在工会中,我收到了以下错误。

类型不匹配:无法从JavaRDD转换为CassandraJavaRDD

虽然RDD的两种类型都相似。

所以1)我应该使用Cast作为

 cassandraRDD2 =  (CassandraJavaRDD<CassandraRow>) cassandraRDD2.union(cassandraRDD);

2)或者将RDD之一的类型更改为JavaRDD

1 个答案:

答案 0 :(得分:2)

问题出现是因为根据docs

  

方法: union(JavaRDD other)返回此RDD与另一个RDD的并集。

     

返回值:JavaRDD

因此不匹配。

因为根据this

public class CassandraJavaRDD<R> extends JavaRDD<R> {
...
}

CassandraJavaRDD类扩展JavaRDD,因此您可以使用:

JavaRDD<CassandraRow> cassandraRDD = null;
JavaRDD<CassandraRow> cassandraRDD2 = null;

因此union()方法的返回值将与其类型匹配。