apache-spark - 使用过滤器时,火花是否会从 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
})
解决方案
检查给定连接器的过滤器是否被按下的最简单方法是使用 Spark UI。
Spark 中的扫描节点将具有从数据源读取的记录数的指标。(您可以检查此 Spark UI -> SQL 选项卡,在运行查询时)
编写带有和不带有显式谓词的查询(在小数据集上) .
推论
1. 如果扫描节点中的记录数相同,有无谓词-Spark 已从数据源中完全读取数据,将在 Spark 中进行过滤。
2.如果数字不同,数据源连接器中已经实现了谓词下推。
3. 通过这个实验,您还可以计算出哪些类型的谓词被下推。(取决于连接器的实现)
推荐阅读
- active-directory - 如何在此 Active Directory 字符串上设置所有国家/地区?
- sql - PostgreSQL 连接类型
- sql - 如何创建具有两个主键的表,其中一个是一个表中的外键,另一个是另一个表中的外键?
- javascript - Intellij idea 无法识别 mochajs 关键字,例如“describe”、beforeAll、it 等
- ios - Google AdMob 返回“配置没有有效的 Google 应用 ID”
- c++ - Boost Spirit:无法让替代操作员按我的预期工作
- autodesk-forge - 无法准备应用程序包,因为它正被另一个进程使用
- php - 在 WooCommerce 中使用 AND 关系对 2 个类别术语进行税务查询
- amazon-web-services - 为什么使用 AWS4 签名时默认区域的 s3 请求会失败
- javascript - 2个相同的javascript,一个工作一个不