使用IN子句过滤Spark Cassandra连接器
我正面临着针对java的spark cassandra连接器过滤的一些问题。 Cassandra允许使用IN子句过滤分区键的最后一列。 例如
create table cf_text (a varchar,b varchar,c varchar, primary key((a,b),c)) Query : select * from cf_text where a ='asdf' and b in ('af','sd'); sc.cassandraTable("test", "cf_text").where("a = ?", "af").toArray.foreach(println)
我如何指定在spark中的CQL查询中使用的IN子句? 如何指定范围查询?
只是想知道,但你的Spark代码上面有效吗? 我认为Spark不允许在分区键上使用WHERE
(在你的情况下为a
和b
),因为它在引擎盖下使用它们(参见本问题的最后一个答案): Spark Datastax Java API Select语句
在任何情况下,使用Cassandra Spark连接器,您都可以堆叠WHERE
子句,并且可以使用List
指定IN
。
List valuesList = new ArrayList (); valuesList.Add("value2"); valuesList.Add("value3"); sc.cassandraTable("test", "cf") .where("column1 = ?", "value1") .where("column2 IN ?", valuesList) .keyBy(new Function() { public String call(MyCFClass _myCF) throws Exception { return _myCF.getId(); } });
请注意, 使用IN和Cassandra / CQL的常规规则仍适用于此处。
范围查询以类似的方式运行:
sc.cassandraTable("test", "person") .where("age > ?", "15") .where("age < ?", "20") .keyBy(new Function() { public String call(Person _person) throws Exception { return _person.getPersonid(); } });
- Spark与Cassandra输入/输出
- apache spark MLLib:如何为字符串function构建标记点?
- 任务不可序列化 – Spark Java
- 如何更新火花流中的广播变量?
- Apache Spark中的数据集
- 为什么Spark在本地模式下失败并且“无法获得broadcast_0的broadcast_0_piece0”?
- 缓存()/ persist()的apache-spark内存消耗
- 无法读取工件描述符:IntelliJ
- 如何修复java.lang.ClassCastException:无法将scala.collection.immutable.List的实例分配给字段类型scala.collection.Seq?