如何使用 DataFrames 来利用 Cassandra 分区器?

How to take advantage of Cassandra partitioner using DataFrames?

根据 documentation,Cassandra Partitioner 可以帮助减少随机播放,从而提高整体性能。要利用分区程序,我应该使用 keyBy 方法。给定 table:

CREATE TABLE data_storage.dummy (
id text,
value bigint,
PRIMARY KEY (id)
) 

我可以使用 RDD API 和 DataFrame API

查询 table
  val keySpace = "data_storage"
  val table = "dummy"

  //option 1
  private val df: DataFrame = session.read.format("org.apache.spark.sql.cassandra")
    .option("keyspace", keySpace)
    .option("table", table)
    .load
  println(df.rdd.partitioner) //prints None

  //option 2
  val rdd = session.sparkContext.cassandraTable(keySpace, table).keyBy("id")
  println(rdd.partitioner) //prints Some(CassandraPartitioner)

是否有任何方法可以将有关如何查询数据的信息传递给 DataFrame reader(类似于 DataFrame 的 keyBy() 方法)

如果是 DataFrame,则无需指定分区程序。您只需确保将 Cassandra DataFrame 的 pushdown 设置为 true。 检查此文档 Automatic Predicate Pushdown and Column Pruning.