我是Spark的新手,最近我看到一个代码以RDD格式将数据保存到Cassandra表。但是我不知道它是如何进行列映射的。它既不使用case类,也在代码中指定任何列名,如下所示:
rdd
.map(x => (x._1, x._2, x_3)) // x is a List here
.repartitionByCassandraReplica(keyspace, tableName)
.saveToCassandra(keyspace, tableName)
因为里面的x只是一个List[(Int, String, Int)]
,它不是case类,所以没有名称映射到Cassandra表。那么,Cassandra表中是否存在与我们在代码中指定的列顺序相匹配的特定顺序呢?
这个映射依赖于Cassandra表定义中列的顺序,如下所示:
- 分区键列按指定顺序排列
- 按指定顺序对列进行集群
- 其余列按名称字母顺序排序
Spark Cassandra Connector依赖于表定义中的这些列将与Scala元组中的字段顺序匹配。您可以在TupleColumnMapper
类的源代码中看到。