Spark cassandra:根据主要RDD的属性("其中tableA.myValue> tableB.myOtherValue")

时间:2016-11-21 10:37:56

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

有没有办法连接2个表,在2个表之间的列上添加条件?

示例:

case class TableA(pkA: Int, valueA: Int)
case class TableB(pkB: Int, valueB: Int)


val rddA = sc.cassandraTable[TableA]("ks", "tableA")
rddA.joinWithCassandraTable[TableB]("ks", "tableB").where("tableB.valueB > tableA.valueA")

有没有办法发送where("tableB.valueB > tableA.valueA")指令? (" tableB.value"是一个聚类列)

1 个答案:

答案 0 :(得分:0)

RDD.where()调用只是将谓词传递给CQL。 CQL仅限于快速简单的OLTP查询。 只有SparkSQL才能完成更复杂的查询。对于你的情况,它可能是这样的:

sqlContext.read.format("org.apache.spark.sql.cassandra")
    .options(Map( "table" -> "tableA", "keyspace"->"ks"))
    .load().registerTempTable("tableA")
sqlContext.read.format("org.apache.spark.sql.cassandra")
    .options(Map( "table" -> "tableB", "keyspace"->"ks"))
    .load().registerTempTable("tableB")
sqlContext.sql("select * from tableA join tableB on tableB.valueB > tableA.valueA").show