apache-spark - Spark 是否支持结构数组的列扫描修剪
问题描述
我在以下架构中有一个名为“家庭”的数据框:
root
|-- country_code: string (nullable = true)
|-- region_code: string (nullable = true)
|-- individuals: array (nullable = true)
| |-- element: struct (containsNull = true)
| | |-- individual_id: string (nullable = true)
| | |-- ids: array (nullable = true)
| | | |-- element: struct (containsNull = true)
| | | | |-- id_last_seen: date (nullable = true)
| | | | |-- type: string (nullable = true)
| | | | |-- value: string (nullable = true)
| | | | |-- year_released: integer (nullable = true)
我可以使用以下代码查找包含至少一台 2018 年后发布的设备的家庭
val sql = """
select household_id
from household
where exists(individuals, id -> exists(id.ids, dev -> dev.year_released > 2018))
"""
val v = spark.sql(sql)
它运行良好,但是,我发现 spark 查询计划器无法修剪不需要的列。该计划表明 Spark 必须读取嵌套结构的所有列
用 spark 2.4.5 和 3.0.0 对此进行了测试,得到了相同的结果。
只是想知道 Spark 是否支持或将添加对结构数组的列扫描修剪的支持?
解决方案
是的。
要激活嵌套模式修剪,您必须在上下文中设置该选项:
spark.conf.set("spark.sql.optimizer.nestedSchemaPruning.enabled", "true")
推荐阅读
- php - 静态属性将如何在队列中工作?
- asp.net-core - 如何使用 Azure Active Directory 在 ASP.NET Core 应用程序中获取经过身份验证的用户的名称
- python - 以毫秒为单位将时间戳传递给由 SQLite3 支持的 SQLAlchemy
- javascript - JavaScript 函数在 Django 上不起作用
- python - 退出程序后输入数据不会立即保存
- android - 使用 RecyclerView 删除 Sqlite 中的行
- reactjs - 在 react-select 中排序搜索结果
- c - “正常”创建数组和使用 malloc 之间的区别
- c# - 全部加载后更新主用户界面
- c - 尝试从 argv[] 读取文件时出现核心分段错误