Spark SQL and Cassandra JOIN



我的 Cassandra 模式包含一个表,其中包含一个分区键(时间戳(和一个parameter列(作为聚类键(。

每个分区包含 10k+ 行。这是以每秒 1 个分区的速率记录数据。

另一方面,用户可以定义"数据集",我有另一个表,其中包含作为分区键的"数据集名称"和一个聚类列,该列是引用另一个表的时间戳(因此"数据集"是分区键列表(。

当然,我想做的看起来像是 Cassandra 的反模式,因为我想加入两个表。

但是,使用Spark SQL,我可以运行这样的查询并执行JOIN

SELECT * from datasets JOIN data 
    WHERE data.timestamp = datasets.timestamp AND datasets.name = 'my_dataset'

现在的问题是:Spark SQL是否足够智能,可以只读取与datasets中定义的timestamp相对应data的分区?

编辑:修复有关连接优化的答案

Spark SQL是否足够智能,可以只读取与数据集中定义的时间戳相对应的数据分区?

不。事实上,由于你为数据集表提供了分区键,Spark/Cassandra 连接器将执行谓词下推,并使用 CQL 直接在 Cassandra 中执行分区限制。但是,除非将RDD API与joinWithCassandraTable()一起使用,否则连接操作本身不会有谓词下推

有关所有可能的谓词下推情况,请参阅此处:https://github.com/datastax/spark-cassandra-connector/blob/master/spark-cassandra-connector/src/main/scala/org/apache/spark/sql/cassandra/BasicCassandraPredicatePushDown.scala

相关内容

  • 没有找到相关文章

最新更新