开发者概览
PartialProject
登录后可跨设备保存划线和私人笔记登录
部分投影支持
在 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 中定义的黑名单表达式,该特性同样有益。
限制
该特性目前处于开发的初步阶段,将在未来的更新中持续改进。
评论
登录后参与评论
正在加载评论…
KnowForge