最简单的做法是创建一个 CaseClass,其中的类与表中的行匹配
case class PersonRow(pID: int, pName: String, pAge: Int)
context.parallelize(Seq(
PersonRow(1, "abc", 24),
PersonRow(2, "pqr", 23),
PersonRow(3, "xyz", 26)
)).saveToCassandra("ks","person")
欲了解更多信息,请参阅Spark Cassandra Connector Documentation
编辑
mapToRow 在 Scala 代码中是不必要的,因为它基本上是 Scala 中缺乏隐式的一种解决方法。 SaveToCassandra 通常使用隐含的RowWriterFactory,Scala 可以通过查看 RDD 类类型来为您完成此操作。在 Java 中,必须手动创建工厂。
scala> class SomeRandomClass (val k:Int, val v:Int) {
| def fun() = {println("lots of fun")}
| val somethingElse:Int = 5
| }
defined class SomeRandomClass
scala> sc.parallelize(1 to 10).map( x => new SomeRandomClass(x,x)).saveToCassandra("test","test")
scala> sc.cassandraTable("test","test")
res4: com.datastax.spark.connector.rdd.CassandraTableScanRDD[com.datastax.spark.connector.CassandraRow] = CassandraTableScanRDD[7] at RDD at CassandraRDD.scala:15
scala> sc.cassandraTable("test","test").collect
res5: Array[com.datastax.spark.connector.CassandraRow] = Array(CassandraRow{k: 5, v: 5}, CassandraRow{k: 10, v: 10}, CassandraRow{k: 1, v: 1}, CassandraRow{k: 8, v: 8}, CassandraRow{k: 2, v: 2}, CassandraRow{k: 4, v: 4}, CassandraRow{k: 7, v: 7}, CassandraRow{k: 6, v: 6}, CassandraRow{k: 9, v: 9}, CassandraRow{k: 3, v: 3})
请注意,这只是因为可以在类的字段(k 和 v)到表中的列“k 和 v”之间找到映射。