如何使用Java中的Spark Cassandra Connector自定义列映射?

时间:2017-04-01 16:08:25

标签: apache-spark spark-streaming spark-cassandra-connector

我想将列映射更改为追加。有没有更好的方法来使用Java中的Spark Cassandra Connector自定义列映射?

 ColumnName song_id = new ColumnName("song_id", Option.empty());
 CollectionColumnName key_codes = new ColumnName("key_codes", Option.empty()).append();
 List<ColumnRef> collectionColumnNames = Arrays.asList(song_id, key_codes);
 scala.collection.Seq<ColumnRef> columnRefSeq = JavaApiHelper.toScalaSeq(collectionColumnNames);

 javaFunctions(songStream)
                .writerBuilder("demo", "song", mapToRow(PianoSong.class))
                .withColumnSelector(new SomeColumns(columnRefSeq))
                .saveToCassandra();

这取自this Spark Streaming code样本。

1 个答案:

答案 0 :(得分:1)

只需使用 CollectionColumnName

哪个有构造函数

case class CollectionColumnName(
    columnName: String,
    alias: Option[String] = None,
    collectionBehavior: CollectionBehavior = CollectionOverwrite) extends ColumnRef 

您可以通过设置alias重命名,然后可以使用collectionBehavior更改插入行为,该行为采用以下类别。

Api Link

/** Insert behaviors for Collections. */
sealed trait CollectionBehavior
case object CollectionOverwrite extends CollectionBehavior
case object CollectionAppend extends CollectionBehavior
case object CollectionPrepend extends CollectionBehavior
case object CollectionRemove extends CollectionBehavior

这意味着你可以做到

CollectionColumnName appendColumn = 
  new CollectionColumnName("ColumnName", Option.empty(), CollectionPrepend$.MODULE$);

看起来更像Java-y并且更加明确。你有这个代码的任何其他目标吗?