【发布时间】:2018-09-18 23:00:48
【问题描述】:
给定 Cassandra 表:
CREATE TABLE data_storage.stack_overflow_test_table (
id int,
text_id text,
clustering date,
some_other text,
PRIMARY KEY (( id, text_id ), clustering)
)
以下查询是有效查询:
select * from data_storage.test_table_filtering where id=4 and text_id='2';
因为我包含了从分区键到查询的所有列。
考虑以下代码:
val ds = session.
read
.format("org.apache.spark.sql.cassandra")
.options(Map("table" -> "stack_overflow_test_table", "keyspace" -> "data_storage"))
.load()
.where(col("id") === 4 &&
col("text_id") === "2").show(10)
由于 spark-cassandra 连接器将谓词推送到 Cassandra,我预计 Spark 将发送 Cassandra 的查询类似于
SELECT "id", "text_id", "clustering", "some_other" FROM "data_storage"."stack_overflow_test_table" WHERE "id" = ? AND "text_id" = ?
但是,我可以在日志中看到
18/04/09 15:38:09 TRACE 连接:连接[localhost/127.0.0.1:9042-2, inFlight=1, closed=false], 流 256, 写入请求 PREPARE SELECT "id", "text_id ", "集群", "some_other" FROM "data_storage"."stack_overflow_test_table" WHERE "id" = ?和“text_id”=?允许过滤
这意味着 spark-cassandra-connector 在查询中添加了 ALLOW FILTERING
因此我有两个问题:
- 这会影响性能吗?
- 有解决方法吗?
【问题讨论】:
标签: apache-spark cassandra spark-dataframe spark-cassandra-connector