Какие версии следует использовать для подключения Spark Cassandra с использованием языка Java?
Я пытаюсь соединить базу данных spark и cassandra, используя язык Java. Для подключения свечей и кассандры я использую последнюю версию Spark-cassandra-Connector, т.е. 2.4.0. В настоящее время я могу подключить свечи и кассандру с помощью разъема. Я получаю данные в формате RDD, но не могу прочитать данные из этой структуры данных. Если я использую фабрику чтения строк в качестве третьего параметра cassandraTable(), я получаю
> Wrong 3rd argument type. Found: > 'java.lang.Class<com.journaldev.sparkdemo.JohnnyDeppDetails>', > required: > 'com.datastax.spark.connector.rdd.reader.RowReaderFactory<T>'
Кто-нибудь может сказать мне, какую версию мне следует использовать или в чем здесь проблема?
CassandraTableScanJavaRDD PricesRDD2 = CassandraJavaUtil.javaFunctions(sc).cassandraTable(пространство ключей, таблица,JohnnyDeppDetails.class);
Мой pom.xml:
<!-- Import Spark -->
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.11</artifactId>
<version>2.4.0</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/com.datastax.spark/spark-cassandra-connector -->
<dependency>
<groupId>com.datastax.spark</groupId>
<artifactId>spark-cassandra-connector_2.11</artifactId>
<version>2.4.0</version>
</dependency>
<dependency>
<groupId>com.datastax.spark</groupId>
<artifactId>spark-cassandra-connector-java_2.10</artifactId>
<version>1.5.0-M2</version>
</dependency>
<dependency>
<groupId>com.datastax.cassandra</groupId>
<artifactId>cassandra-driver-core</artifactId>
<version>2.1.9</version>
</dependency>
<dependency>
<groupId>com.datastax.cassandra</groupId>
<artifactId>cassandra-driver-mapping</artifactId>
<version>2.1.9</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.spark/spark-sql -->
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-sql_2.12</artifactId>
<version>2.4.0</version>
</dependency>
</dependencies>
1 ответ
Вместо того, чтобы передавать экземпляр класса, вам нужно создать RowReaderFactory
с использованием mapRowTo
функция, как это (это из моего примера):
CassandraJavaRDD<UUIDData> uuids = javaFunctions(spark.sparkContext())
.cassandraTable("test", "utest", mapRowTo(UUIDData.class));
когда вы напишете обратно, вы можете преобразовать класс в соответствующую фабрику через mapToRow
функция.