Skip to content

Optimized ApplyPushDownRule, LynxRecord and JoinTableSizeEstimateRule#152

Open
xiaowu297 wants to merge 7 commits into
lynxworld:devfrom
xiaowu297:dev
Open

Optimized ApplyPushDownRule, LynxRecord and JoinTableSizeEstimateRule#152
xiaowu297 wants to merge 7 commits into
lynxworld:devfrom
xiaowu297:dev

Conversation

@xiaowu297

Copy link
Copy Markdown

成员1:wx
分工:尝试优化ApplyPushDownRule.scala,额外提出了几个函数
具体改动内容:
(1)在ApplyPushDownRule.scala,添加了 if apply.right.isEmpty 条件,直接判断 Apply 节点是否无效,简化了移除逻辑,同时修改了val returnItemNames = A.schema.map(_.1).toSet,因为如果 A.schema 包含大量字段,Set 的查找性能更优。
(2)将power函数从时间类函数中移到对数操作类函数中
(3)增加了对数据的截断函数trunc,支持可选参数指定保留的小数位数,默认截断到整数位;增加了弧度转化为角度的函数degrees;增加了角度转化为弧度的函数radians
成员2:lxy
分工:优化了LynxRecord中一些潜在问题。
具体优化内容:
(1)类型转换安全性:map(
.asInstanceOf[LynxX]) 中未进行类型检查,若类型不匹配,程序会抛出 异常,因此使用模式匹配方法,避免程序崩溃。
(2)toMap方法:使用 keys.zip(values),若 cols.keys 和 values 的长度不一致,会导致抛出异常或数据丢失,因此修改为根据 cols 的映射来生成键值对。
(3)增加数据类型支持:除去文中提到的数据类型,还增加了date以及list两种数据类型供使用。
(4)去除列名大小写干扰:有时列名的大小写可能不一致,因此提供了一个大小写无关的访问选项getIgnoreCase()。
(5)增加日志记录logger:当无法找到列名或发生错误时,记录日志以便排查问题。
成员3:lyx
分工:对 JoinTableSizeEstimateRule 进行了代码优化。
具体优化内容:
(1)apply方法:在apply方法内模式匹配方式不够简洁明了,后续如果需要扩展对其他类型节点的判断逻辑,容易使match代码块变得臃肿,因此新增了两个私有辅助方法,让apply方法内的模式匹配逻辑更清晰。
(2)estimateNodeRow方法:代码中有较多的嵌套match和比较复杂的类型判断及取值操作,使用collect方法来更简洁地处理属性提取部分,同时使用flatten方法将可能嵌套的结果扁平化处理。
(3)joinRecursion方法:代码中对于parent.children.head和parent.children.last的处理逻辑基本重复,,对此提取出了一个私有方法,将获取基础表的公共操作封装在一个私有方法。

增加一个截断函数,默认保留整数,提供可选参数指定截断到的小数位数
上一个描述错误,应该是power不应该放在时间类函数下
添加了 if apply.right.isEmpty 条件,直接判断 Apply 节点是否无效,简化了移除逻辑,同时修改了val returnItemNames = A.schema.map(_._1).toSet,因为如果 A.schema 包含大量字段,Set 的查找性能更优。
具体优化内容:
(1)apply方法:在apply方法内模式匹配方式不够简洁明了,后续如果需要扩展对其他类型节点的判断逻辑,容易使match代码块变得臃肿,因此新增了两个私有辅助方法,让apply方法内的模式匹配逻辑更清晰。
(2)estimateNodeRow方法:代码中有较多的嵌套match和比较复杂的类型判断及取值操作,使用collect方法来更简洁地处理属性提取部分,同时使用flatten方法将可能嵌套的结果扁平化处理。
(3)joinRecursion方法:代码中对于parent.children.head和parent.children.last的处理逻辑基本重复,,对此提取出了一个私有方法,将获取基础表的公共操作封装在一个私有方法。
具体优化内容:
(1)类型转换安全性:map(_.asInstanceOf[LynxX]) 中未进行类型检查,若类型不匹配,程序会抛出 异常,因此使用模式匹配方法,避免程序崩溃。
(2)toMap方法:使用 keys.zip(values),若 cols.keys 和 values 的长度不一致,会导致抛出异常或数据丢失,因此修改为根据 cols 的映射来生成键值对。
(3)增加数据类型支持:除去文中提到的数据类型,还增加了date以及list两种数据类型供使用。
(4)去除列名大小写干扰:有时列名的大小写可能不一致,因此提供了一个大小写无关的访问选项getIgnoreCase()。
(5)增加日志记录logger:当无法找到列名或发生错误时,记录日志以便排查问题。
增加了对数据的截断函数trunc,支持可选参数指定保留的小数位数,默认截断到整数位
增加了弧度转化为角度的函数degrees;增加了角度转化为弧度的函数radians
@HC-teemo HC-teemo changed the title 小组作业 Optimized ApplyPushDownRule, LynxRecord and JoinTableSizeEstimateRule Jan 6, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant