如何在 Cassandra 中使用 spark 获取行范围

Posted

技术标签:

【中文标题】如何在 Cassandra 中使用 spark 获取行范围【英文标题】:How to get range of rows using spark in Cassandra 【发布时间】:2016-03-17 08:49:57 【问题描述】:

我在 cassandra 中有一张表,其结构是这样的

CREATE TABLE dmp.Table (

pid text PRIMARY KEY,
day_count map<text, int>, 
first_seen map<text, timestamp>, 
last_seen map<text, timestamp>, 
usage_count map<text, int>

现在我正在尝试使用 spark-cassandra driver 查询它,那么有没有什么地方可以获取数据块。 就像我有 100 行一样,我应该能够得到 0-10 行然后 10 -20 等等。

 CassandraJavaRDD<CassandraRow> cassandraRDD = CassandraJavaUtil.javaFunctions(javaSparkContext).cassandraTable(keySpaceName, tableName);

我问这个是因为我的表中没有可以使用 IN 子句查询以获取行范围的列。

【问题讨论】:

【参考方案1】:

您可以添加一个自动递增的 ID 列 - 请参阅我的 DataFrame-ified Zip With Index 解决方案。然后可以通过新创建的id列查询:

SELECT ... WHERE id >= 0 and id < 10;

等等

【讨论】:

您好,感谢您的回答,但是如何使用 java 做同样的事情呢?同样为了这个工作,我想我必须阅读整个表格,这就是问题所在,我无法阅读整个表格。如果我错了,请提出建议。 @RahulKoshaley 取决于“阅读整个表格”的含义。为了添加id 列,执行程序必须读取整个表,但您的驱动程序应用程序不需要。这使您可以“窗口化”数据,并且一次只能读取驱动程序中的 N 行。 我将如何选择 N 行。 ? 在我的回答中——只需添加一个偏移量来选择哪个窗口:"SELECT ... WHERE id &gt;= " + offset + " and id &lt; " + (offset + 10) 对不起,我的意思是在更改并添加了一个 id 列之后,我将如何将值放入其中。 ?即我必须读取整个表行,然后将值放入 Id 列,因为我无法使用现有表结构选择 N 行(部分)。

以上是关于如何在 Cassandra 中使用 spark 获取行范围的主要内容,如果未能解决你的问题,请参考以下文章

如何在spark中读写cassandra数据

使用 Spark/Cassandra 的时间序列 - 如何在值满足条件时找到时间戳?

如何在 Spark 中过滤来自 Cassandra 的空数据?

如何在从 Spark 消费 Kafka 时获取偏移 id,将其保存在 Cassandra 中并使用它来重新启动 Kafka?

Apache Spark 如何在内存中工作?

spark如何在cassandra表之间复制数据?