Spark Cassandra连接器 - 使用IN进行动态数据过滤

时间:2018-06-08 10:46:00

标签: scala apache-spark cassandra

假设我的RDD项目类型为

case class Foo(name: String, nums: Seq[Int])

以及my_schema.foo中的表Cassandra,其中的分区键由namenum列组成

现在,我想在输入RDD中获取所有相应行中的每个元素,例如:

SELECT * from my_schema.foo where name = :name and num IN :nums

我尝试过以下方法:

  1. 使用joinWithCassandraTable扩展程序:rdd.joinWithCassandraTable("my_schema", "foo").on(SomeColumns("name")),但我不知道如何指定IN约束

  2. 对于输入RDD的每个元素,发出一个单独的查询(在map函数内)。这不起作用,因为spark上下文不可序列化且无法传递到map

  3. 对输入RDD进行Flatmap,为(name, num)中的每个num生成单独的项nums。这可行,但它可能比使用IN子句效率低。
  4. 解决这个问题的正确方法是什么?

0 个答案:

没有答案