0

我正在使用 Java 编写 Spark 应用程序。如果我有一个自定义元组,假设类“Person”。

Class Person { 
  public String name1; 
  public String name2; 
  public String name3; 
} 

我有一个

JavaRDD<Person> rdd;

现在我想把它保存到 Cassandra。

假设我在 Cassandra 中有一个名为“people”的表,其中包含“name1”、“name2”和“name3”、“name4”、...、“name10”三列。根据教程,默认的列映射使用以下代码:

javaFunctions(rdd).writerBuilder("test", "person", mapToRow(Person.class)).saveToCassandra(); 

这将使用默认的列映射,例如:

Person.name1  --> "name1"    
Person.name2  --> "name2"     
Person.name3  --> "name3" 

但是我想自定义列映射,新的映射是这样的:

Person.name1  --> "name3"       
Person.name2  --> "name2"  
Person.name3  --> "name1" 

甚至我想丢弃 Person.name2

Person.name1  --> "name3"
Person.name3  --> "name1"

无论如何,我想知道是否有办法覆盖或替换默认的 RowWriter?
我应该怎么做才能修改列映射?
我找不到任何关于 Java 中自定义列映射的好材料。

4

1 回答 1

1

请找到 saveTOCassandra 的签名

def saveToCassandra(keyspaceName: String, 
                    tableName: String, columns: 
                    ColumnSelector = AllColumns, 
                     writeConf: WriteConf = WriteConf.fromSparkConf(sparkContext.getConf)) 

解释:

@param table 用于创建新表的表定义

@param columns 选择要保存数据的列。仅使用唯一的列名,并且您必须至少选择所有主键列。所有其他字段都被丢弃。未选择的属性/列名称保持不变。

如果我正确理解您的需求,您可以使用参数“列”来实现您的结果。

于 2015-06-05T00:13:48.543 回答