Мы недавно начали проект с большими данными, используя Scala, Spark и Cassandra, и я новичок во всех этих технологиях. Я пытаюсь выполнить простую задачу записи и чтения из таблицы cassandra. Я могу добиться этого, если я буду хранить имена свойств и имена столбцов либо в нижнем регистре, либо в виде змеи (unserscores), но я хочу использовать случай верблюда в своем коде scala. Есть ли лучший способ добиться этого, используя формат верблюда в Scala и случай с змеей в cassandra.Datastax spark cassadra connector - запись DF в таблицу cassandra
мы используем
Скала - 2.10.5 искра - 1.6.2 datastax искровой Cassandra-разъем - 1.6.0 Cassandra - 3.0.9.1346 datastax предприятия - 5.0.3
Cassandra стол
CREATE TABLE dev.castable (
id int PRIMARY KEY,
long_name text,
name text,
short_name text)
Scala код
val conf = new SparkConf()
.setAppName("TestHelper")
.setMaster("local")
.set("spark.cassandra.connection.host","127.0.01")
val sc = new SparkContext(conf)
val sqlContext = new SQLContext(sc)
println("writing data to cassandra")
val df = sqlContext.createDataFrame(List(new MyRow(2,Option("long name"), "ss", Option("short name"))))
df.write //*** this is not working
.cassandraFormat("castable", "dev")
.mode(SaveMode.Append)
.save()
println("reading data from cassandra") //*** This is working fine
val rdd = sc.cassandraTable[MyRow]("dev", "castable")
rdd.foreach(println)
Исключение
Exception in thread "main" java.util.NoSuchElementException: Columns not found in table dev.castable: longName, shortName
at com.datastax.spark.connector.SomeColumns.selectFrom(ColumnSelector.scala:38)
at com.datastax.spark.connector.writer.TableWriter$.apply(TableWriter.scala:268)
at com.datastax.spark.connector.RDDFunctions.saveToCassandra(RDDFunctions.scala:36)
at org.apache.spark.sql.cassandra.CassandraSourceRelation.insert(CassandraSourceRelation.scala:67)
at org.apache.spark.sql.cassandra.DefaultSource.createRelation(DefaultSource.scala:85)
at org.apache.spark.sql.execution.datasources.ResolvedDataSource$.apply(ResolvedDataSource.scala:222)
at org.apache.spark.sql.DataFrameWriter.save(DataFrameWriter.scala:148)
at com.aktana.spark.util.LocalTestDriver$.main(LocalTestDriver.scala:38)
Я прочитал, что искровой-Кассандры разъем автоматически выполняет это преобразование автоматически, но он не работает для меня. datastax spark-cassandra-connector
https://datastax-oss.atlassian.net/browse/SPARKC-370 - В настоящее время Dataframes ведет себя, как есть. – RussS
Спасибо, Russ, я могу решить это с помощью RDD. – siva