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 中,根据您的查询进行过滤,然后逐个保存。
运行 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 中,根据您的查询进行过滤,然后逐个保存。