开发者概览

PartialProject

qianmoQqianmoQ· 更新于 2026-10-02· 阅读 2 分钟· 0 次阅读

登录后可跨设备保存划线和私人笔记登录

部分投影支持

在 Gluten 中,全面支持所有 Spark 表达式仍存在差距(例如某些 JSON 函数或 Java UDF)。在这种情况下,Gluten 会选择 JVM 代码路径来运行这些表达式,这可能导致性能回退。

部分投影允许 Gluten 在 JVM 和 C++ 之间进行最小化的数据拷贝,引入该特性正是为了避免这些性能回退。

详细实现

为 UDF 添加部分投影

例如,对于表达式 hash(udf(col0)), col1, col2, col3, col4,部分投影允许我们只将 col0 转换为行式或列式并转换为 Arrow 作为输入,然后将 udf(col0) 转换为别名 partialProject1_。接着,ProjectExecTransformer 将处理 hash(partialProject1_), col1, col2, col3, col4, partialProject1_。这一特性节省了在列式格式与行式格式之间相互转换的开销。

为不支持的表达式添加部分投影

部分投影特性同样能使未被原生支持的表达式受益。例如 substr(from_json(col_a))。由于 from_json 未得到完全支持,Gluten 可能会使用 JVM 代码路径。部分投影不会对整个表达式进行投影,而是尝试对 from_json() 进行投影,并对 substr() 执行原生投影。

对于在 spark.gluten.expression.blacklist 中定义的黑名单表达式,该特性同样有益。

限制

该特性目前处于开发的初步阶段,将在未来的更新中持续改进。

评论

登录后参与评论

正在加载评论…