保存到spark中的cassandra,在java

时间:2016-11-20 22:19:56

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

我试图仅使用spark中的一行将一行保存到cassandra表中(这是在spark中长时间处理后的结果),我使用新方法使用spark会话连接到cassandra,如下所示:

     SparkSession spark = SparkSession
          .builder()
          .appName("App")
          .config("spark.cassandra.connection.host", "cassandra1.example.com")
          .config("spark.cassandra.connection.port", "9042")
          .master("spark://cassandra.example.com:7077")
          .getOrCreate();

连接成功并且运行良好,因为我在与cassandra相同的节点上安装了Spark,在从cassandra读取一些RDD之后我想保存到cassandra中的另一个表,所以我遵循文档here,即保存到cassandra的部分如下:

List<Person> people = Arrays.asList(
    new Person(1, "John", new Date()),
    new Person(2, "Troy", new Date()),
    new Person(3, "Andrew", new Date())
);
JavaRDD<Person> rdd = spark.sparkContext().parallelize(people);
javaFunctions(rdd).writerBuilder("ks", "people", mapToRow(Person.class)).saveToCassandra();

我面临的问题是不接受parallelize方法,只有scala版本看起来可用,错误是:

The method parallelize(Seq<T>, int, ClassTag<T>) in the type 
SparkContext is not applicable for the arguments (List<Person>) 

如何在Java中使用它来保存到cassandra表?

1 个答案:

答案 0 :(得分:1)

parallelize java.util.List,您可以使用JavaSparkContext(而非SparkContext),如下所示:

import org.apache.spark.api.java.JavaSparkContext;

JavaSparkContext sc = new JavaSparkContext(spark.sparkContext());
sc.parallelize(people);