当我们在 where 中使用过滤器时,spark 如何读取数据

Posted

技术标签:

【中文标题】当我们在 where 中使用过滤器时,spark 如何读取数据【英文标题】:how spark reads data when we are using a filter in where 【发布时间】:2020-04-24 11:44:44 【问题描述】:

我正在从一个很大 (900 GB) 的表中读取一个密钥。 它只是一个条件,但火花已经启动了许多没有大量任务的工作。

我正在使用 11 节点集群(每个节点 128 GB 内存和 16 个内核)

我知道我们可能需要更多的任务,但为什么这么多工作,为什么不能在一个阶段处理......?

谁能解释一下当我们使用 where 条件时内部会发生什么..

感谢您的回复。please check this image

【问题讨论】:

什么是sample.table_a 从该表中仅读取 .. 它有 900GB 是什么样的桌子? Spark 视图、SQL 数据库表、Cassandra 表……?如果支持,Spark 会尝试将谓词推送到连接器。 Spark sql 表。数据块增量(镶木地板) 【参考方案1】:

Spark 用于批量处理,而不是像您的图像所示的单个键查找,例如带有索引的 ORACLE 数据库。对于多行的 JOIN,这些查找当然更好。

Spark 不知道您在做什么(语义上),因此它遵循其分布式模型并并行处理 - 意味着许多任务 - 用于许多分区。

该图像不适用于 Spark。

【讨论】:

以上是关于当我们在 where 中使用过滤器时,spark 如何读取数据的主要内容,如果未能解决你的问题,请参考以下文章

在 spark 数据框中使用 where 子句加载数据

如果 where 子句已经修复,如何加快 spark sql 过滤器查询?

Apache Spark 如何在内存中工作?

Spark Cassandra 连接器 - where 子句

Spark withColumn 和 where 执行顺序

PostgreSQL WHERE 子句