【问题标题】:Spark cassandra : join table with condition on the query based on attribute from the primary RDD ("where tableA.myValue > tableB.myOtherValue")Spark cassandra:根据主RDD的属性(“where tableA.myValue > tableB.myOtherValue”)在查询中加入条件
【发布时间】:2017-04-04 17:27:00
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    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
    

    【讨论】:

      猜你喜欢
      • 2018-11-20
      • 2020-06-25
      • 2020-05-23
      • 2019-11-12
      • 1970-01-01
      • 2016-01-23
      • 2020-12-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多