假设我的RDD
项目类型为
case class Foo(name: String, nums: Seq[Int])
以及my_schema.foo
中的表Cassandra
,其中的分区键由name
和num
列组成
现在,我想在输入RDD中获取所有相应行中的每个元素,例如:
SELECT * from my_schema.foo where name = :name and num IN :nums
我尝试过以下方法:
使用joinWithCassandraTable
扩展程序:rdd.joinWithCassandraTable("my_schema", "foo").on(SomeColumns("name"))
,但我不知道如何指定IN
约束
对于输入RDD的每个元素,发出一个单独的查询(在map
函数内)。这不起作用,因为spark上下文不可序列化且无法传递到map
(name, num)
中的每个num
生成单独的项nums
。这可行,但它可能比使用IN
子句效率低。解决这个问题的正确方法是什么?