【问题标题】:Spark-Cassandra connector: how to change collections write behaviorSpark-Cassandra 连接器:如何更改集合写入行为
【发布时间】:2020-01-26 23:26:57
【问题描述】:

在 Java 中,我有一个带有 java.util.ArrayList<Short> 类型列的 Spark 数据集(Spark Structured Streaming),我想将数据集写入具有相应 list<smallint> 的 Cassandra 表中。

每次我在 Cassandra 中写入行时,它都会更新现有行,我想自定义 list 的写入行为以控制是否

  • 写入的列表将覆盖现有列表或
  • 书面列表的内容将被追加到已保存在 Cassandra 中的列表内容中

我在spark-cassandra-connector 源代码中发现了一个类CollectionBehavior,它由CollectionAppendCollectionOverwrite 扩展。这似乎正是我正在寻找的东西,但在写信给 Cassandra 时我没有找到使用它的方法。

数据集使用以下方法写入 Cassandra:

dataset.write()
    .format("org.apache.spark.sql.cassandra")
    .option("table", table)
    .option("keyspace", keyspace)
    .mode(SaveMode.Append)
    .save();

是否可以改变这种行为?

【问题讨论】:

  • Cassandra 旨在实现高写入吞吐量。为此,它使用不可变的 SST 。如此合乎逻辑的 Cassandra 不是这种类型的用例。

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


【解决方案1】:

要在设置集合的保存模式时保存到 Cassandra 集合,请使用 RDD API。到目前为止,数据集 API 似乎缺少这一点。因此,将数据集更改为 RDD 并使用 RDD 方法保存到 cassandra 应该能够为您提供所需的行为。

https://github.com/datastax/spark-cassandra-connector/blob/master/doc/5_saving.md

【讨论】:

    猜你喜欢
    • 2017-03-04
    • 2017-08-19
    • 2015-05-24
    • 2020-02-12
    • 2015-09-20
    • 2017-01-13
    • 2015-10-28
    • 2015-05-12
    • 1970-01-01
    相关资源
    最近更新 更多