将信息保存到 Cassandra 不会保持顺序

Saving information to Cassandra keeps no order

我正在使用 Scala 并尝试将我的日历信息从 Spark 保存到 Cassandra。

我开始使用 Cassandra 创建相同的模式:

session.execute("CREATE TABLE calendar (DateNum int, Date text, YearMonthNum int, ..., PRIMARY KEY (datenum,date))")

然后将我的数据从 spark 导入到 Cassandra:

        .write
        .format("org.apache.spark.sql.cassandra")
        .options(Map("table" -> "calendar", "keyspace" -> "ks"))
        .mode(SaveMode.Append)
        .save()

但是当我尝试读取从 Cassandra 上的 Spark 检索到的数据时,这些行看起来非常混乱,而我想保持日历的顺序不变。

我有一行的例子:

20090111 | 2009 年 1 月 11 日 | 200901 |...

Select/Order 似乎也没有解决问题。

Cassandra 中的数据仅在 Cassandra 分区内排序,但分区本身不按值排序,而是按分区键的哈希值组织。所以当你读取数据时,你可以读取附近的Cassandra分区,但它们可能属于完全不同的日期。

因此,如果您在 Spark 中对数据进行了排序,则需要使用 .orderBy

显式对数据进行排序

解决这个问题的方法是使用 Spark 在所有数据库中添加一个具有共同值的新列(例如:“1”),并使该列成为 Cassandra table 中的分区键,这样你为整个 table 获得一个分区,您的信息将保持有序。