首页 > 解决方案 > 使用过滤器时,火花是否会从 Kudu 加载所有数据?

问题描述

我是新来的火花。以下代码将加载所有数据还是仅从 kudu 过滤数据?

val df: DataFrame = spark.read.options(Map(
   "kudu.master" -> kuduMaster,
   "kudu.table" -> s"impala::platform.${table}")).kudu

val outPutDF = df.filter(row => {
     val recordAt: Long = row.getAs("record_at").toString.toLong
     recordAt >= XXX && recordAt < YYY
   })

标签: apache-sparkkudu

解决方案


检查给定连接器的过滤器是否被按下的最简单方法是使用 Spark UI
Spark 中的扫描节点将具有从数据源读取的记录数的指标。(您可以检查此 Spark UI -> SQL 选项卡,在运行查询时)
编写带有和不带有显式谓词的查询(在小数据集上) .

推论
1. 如果扫描节点中的记录数相同,有无谓词-Spark 已从数据源中完全读取数据,将在 Spark 中进行过滤。
2.如果数字不同,数据源连接器中已经实现了谓词下推。
3. 通过这个实验,您还可以计算出哪些类型的谓词被下推。(取决于连接器的实现)


推荐阅读