如何使用 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.
根据 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.