DSE 的 Spark 在 运行 SQL 查询之前是否将所有数据加载到 RDD 中?

Does Spark from DSE laod all data into RDD before running SQL Query?

运行 DSE 4.7

假设我有一个 4 节点 DSE Cassandra/Spark 集群...

我有一个 Cassandra table,里面有 4,000,000 条记录。

On Spark 运行 以下 Spark SQL "select * from table where email = ? or mobile = ?"

Spark会把所有的数据加载到RDD中,然后根据where子句进行过滤吗?每个 spark 节点是否会将每个节点加载到内存中的 1,000,000 条记录?

Will spark load all the data into RDD and then filter based on the where clause?

这取决于您的数据库架构。如果您的查询明确限制扫描到单个 C* 分区(而我们的 where email = ? or mobile = ? 绝对不会),Spark 将只加载部分数据。

在您的情况下,它将必须扫描所有数据。

Will each spark node have 1,000,000 records per node loaded into memory?

同样,这取决于您的数据集大小和工作节点上的 RAM 数量。 Spark RDD 并不总是完全加载到 RAM 中,在您的情况下,它可以分成更小的部分(例如 100k 行),加载到 ram 中,根据您的查询进行过滤,然后逐个保存。