Сохранить в Кассандре в искре, метод распараллеливания не доступен в 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 ответ
К parallelize
java.util.List
ты можешь использовать JavaSparkContext
(не SparkContext
), что-то вроде этого:
import org.apache.spark.api.java.JavaSparkContext;
JavaSparkContext sc = new JavaSparkContext(spark.sparkContext());
sc.parallelize(people);