Scala 如何在cassandra中保持列的顺序

Scala 如何在cassandra中保持列的顺序,scala,cassandra,datastax,Scala,Cassandra,Datastax,我有两张卡桑德拉的桌子: CREATE TABLE table1 ( name text PRIMARY KEY, grade text, labid List<int>); CREATE TABLE table2( name text PRIMARY KEY, deptid List<int> grade text,); 它工作得很好。 但如

我有两张卡桑德拉的桌子:

CREATE TABLE table1 (
          name text PRIMARY KEY,
          grade text, 
          labid List<int>);

CREATE TABLE table2(
          name text PRIMARY KEY,
          deptid List<int>  
          grade text,);
它工作得很好。 但如果使用以下行:

result.saveToCassandra(keyspace, table2)
I获取此类型的错误:com.datastax.spark.connector.types.TypeConversionException:无法将java.lang.String类型的对象测试_数据转换为列表[AnyRef]

是否存在使用满足这两个表的某些列的解决方案[我们不知道将执行哪个表]。例如:

result.saveToCassandra(keyspace, table, SomeColumns(....))?

参数的顺序应该不同,因为表具有不同的列类型:

val result: RDD[String, String, List[Int]] = myFunction();
val reorder: RDD[String, List[Int], String] = result.map(r => r._1, r._3, r._2)
reorder.saveToCassandra(keyspace, table2)

默认情况下,dataframe模式只关心位置,而不关心列名,因此如果您的c*表具有不同的列顺序,您将得到不正确的写入。解决方案如您所说,使用
SomeColumns

val columns = dataFrame.schema.map(_.name: ColumnRef)    
dataFrame.rdd.saveToCassandra(keyspaceName, tableName, SomeColumns(columns: _*))

现在,数据帧列将使用其名称而不是位置写入c*。

是的,我知道您的解决方案。但还有其他解决方案吗?是否有一些专栏会有用?
val columns = dataFrame.schema.map(_.name: ColumnRef)    
dataFrame.rdd.saveToCassandra(keyspaceName, tableName, SomeColumns(columns: _*))