Сохранить в Кассандре в искре, метод распараллеливания не доступен в Java

Я пытаюсь сохранить только одну строку в таблицу cassandra, используя spark в java (это происходит в результате длительной обработки в spark), я использую новый метод для подключения к cassandra, используя сеанс spark, следующим образом:

     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();

Соединение установлено успешно и работает хорошо, так как у меня установлен Spark на тех же узлах, что и cassandra, после чтения некоторых RDD из cassandra я хочу сохранить их в другой таблице в 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();

Проблема, с которой я сталкиваюсь, заключается в том, что метод распараллеливания не принимается, и доступна только версия Scala, ошибка:

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

Как я могу использовать это в Java для сохранения в таблице cassandra?

1 ответ

Решение

К parallelizejava.util.List ты можешь использовать JavaSparkContext (не SparkContext), что-то вроде этого:

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

JavaSparkContext sc = new JavaSparkContext(spark.sparkContext());
sc.parallelize(people);
Другие вопросы по тегам