【问题标题】:How to get range of rows using spark in Cassandra如何在 Cassandra 中使用 spark 获取行范围
【发布时间】: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 子句查询以获取行范围的列。

【问题讨论】:

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


    【解决方案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 行(部分)。
    猜你喜欢
    • 1970-01-01
    • 2021-09-26
    • 1970-01-01
    • 2020-06-03
    • 1970-01-01
    • 1970-01-01
    • 2013-03-03
    • 1970-01-01
    • 2012-09-29
    相关资源
    最近更新 更多