如何在 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 >= " + offset + " and id < " + (offset + 10)
对不起,我的意思是在更改并添加了一个 id 列之后,我将如何将值放入其中。 ?即我必须读取整个表行,然后将值放入 Id 列,因为我无法使用现有表结构选择 N 行(部分)。以上是关于如何在 Cassandra 中使用 spark 获取行范围的主要内容,如果未能解决你的问题,请参考以下文章
使用 Spark/Cassandra 的时间序列 - 如何在值满足条件时找到时间戳?
如何在 Spark 中过滤来自 Cassandra 的空数据?
如何在从 Spark 消费 Kafka 时获取偏移 id,将其保存在 Cassandra 中并使用它来重新启动 Kafka?