有没有办法连接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"是一个聚类列)
答案 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