|
|
@@ -546,31 +546,18 @@ record_per_channel = 100000
|
|
|
- 2026-04-20 UDF 模块重组(kb/92)已完成重组动作,本节是其延伸(登记表)
|
|
|
- 不动 auto-load 机制(`bin/spark-sql-starter.py` + `dw_base/__init__.py:29 COMMON_SPARK_UDF_FILE` 常量),只补文档
|
|
|
|
|
|
-## 三、`__init__.py` 瘦身(高优先级) [聚簇 B(B1)]
|
|
|
+## 三、`__init__.py` 瘦身(已完成 · 修剪式) [聚簇 B(B1)]
|
|
|
|
|
|
-**现状:** `tendata/__init__.py` 约 120 行,import 即执行以下操作:
|
|
|
-- 环境变量设置
|
|
|
-- 颜色常量定义(30+ 个)
|
|
|
-- findspark.init()
|
|
|
-- 用户/权限/路径检测 + 打印
|
|
|
-- cow_says() 调用 shell
|
|
|
+**2026-04-21 完成形态**:原地修剪,不拆 `core/`。`dw_base/__init__.py` 从 127 行 → 83 行。
|
|
|
|
|
|
-**问题:**
|
|
|
-- 任何 `from dw_base import xxx` 都会触发全部初始化
|
|
|
-- 不在 Spark 节点上运行的脚本也被迫执行 `findspark.init()`
|
|
|
-- 影响单元测试(测试 UDF 函数也要初始化 Spark 环境)
|
|
|
+**落地动作**:
|
|
|
+- 删 `import findspark` + `findspark.init()`:pip pyspark 已在 venv site-packages 直接覆盖 `import pyspark`,findspark 在 CDH 节点上即便间接反推出 `$SPARK_HOME` 也只是把同版本 parcel pyspark 前插进 sys.path,业务表现零差异(冒烟已确认)
|
|
|
+- 删 21 个外部零引用的颜色常量:`CHG_BOLD` / `NORM_BLU` / `NORM_WHT` / 7×`BOLD_*` / 7×`BGRD_*`(if/else 两分支同步删)
|
|
|
+- 删 `IS_RUN_BY_NORMAL_USER` 状态变量(两处赋值外部均无引用)
|
|
|
|
|
|
-**建议拆分为:**
|
|
|
+**未拆分为 `core/env.py` / `core/colors.py` / `core/spark_env.py` 的理由**:findspark 删除后"findspark 按需 import"的懒加载诉求大半消失;剩余颜色/env 检测拆三文件需改 11 处调用点 import,收益比修剪方案差,暂不做。若后续单元测试对 "import dw_base 零副作用" 有刚性需求再拆。
|
|
|
|
|
|
-```python
|
|
|
-# dw_base/__init__.py —— 仅做最基本的路径定义
|
|
|
-PROJECT_ROOT_PATH = ...
|
|
|
-PROJECT_NAME = ...
|
|
|
-
|
|
|
-# dw_base/core/env.py —— 环境检测(延迟调用)
|
|
|
-# dw_base/core/colors.py —— 颜色常量
|
|
|
-# dw_base/core/spark_env.py —— findspark 初始化(按需 import)
|
|
|
-```
|
|
|
+**最终 `__init__.py` 保留**:`PROJECT_ROOT_PATH` / `PROJECT_NAME` / `bootstrap_env()` / `sys.path.append` / `HADOOP_CONF_DIR` / `SPARK_CONF_DIR` / `PYSPARK_*` / `COMMON_SPARK_UDF_FILE` / `BANNED_USER` 退出守卫 / `IS_RUN_BY_RELEASE_USER` / `IS_RUN_IN_RELEASE_DIR` / 启动 print / `cow_says()` / 6 个实际被引用的颜色常量(`DO_RESET` / `NORM_RED` / `NORM_GRN` / `NORM_YEL` / `NORM_MGT` / `NORM_CYN`)。
|
|
|
|
|
|
## 四、代码风格修正(中优先级) [聚簇 B(B3)]
|
|
|
|
|
|
@@ -663,7 +650,7 @@ tests/
|
|
|
|
|
|
| 分类 | 处理方式 | 代表包 |
|
|
|
|---|---|---|
|
|
|
-| **强依赖(KEEP)** | 留在 `requirements.txt` | pyspark / pandas / pymongo / PyMySQL / requests / PyYAML / findspark / python-dateutil / wheel / pytest |
|
|
|
+| **强依赖(KEEP)** | 留在 `requirements.txt` | pyspark / pandas / pymongo / PyMySQL / requests / PyYAML / python-dateutil / wheel / pytest |
|
|
|
| **无引用(DROP)** | 直接移除 | openvino / transformers / scikit-learn / scipy / numpy / Flask / matplotlib / lxml / SQLAlchemy / jieba / cpca / openpyxl / xlrd / 等 20+ 个 |
|
|
|
| **stdlib 冗余(STDLIB)** | 移除 backport | `configparser` —— Python 3 标准库自带,backport 安装反而会覆盖 stdlib |
|
|
|
| **弱依赖(LAZY)** | **不写进 requirements**,用到时手动 pip install | elasticsearch / pyhive / redis / cryptography / oss2 / fuzzywuzzy / pypinyin —— 都只被即将清理的老业务代码引用 |
|
|
|
@@ -672,8 +659,8 @@ tests/
|
|
|
|
|
|
- LAZY 类依赖关联的老代码:`get_oldmongo_*` / `mg2es/` / `ent_interface_dingtalk*` 于 2026-04-20 第一批提前清理;同日第二批清理 `dw_base/oss/` 整目录、`dw_base/scheduler/` 整目录(含 polling_scheduler / drop_partitions / drop_daily_full_snapshot_tbls)、`dw_base/hive/` 整目录、`dw_base/utils/` 7 文件(data_distinct / diff_utils / excel_to_hive_utils / hive_diff_database / hive_to_excel_utils / pdt_check_table\*);剩余 `customs/similarity.py` 等在阶段 4 / 阶段 5 一并清理
|
|
|
- 不需要 `requirements-base.txt` / `requirements-dev.txt` 分文件——当前依赖规模下单文件已经足够
|
|
|
-- pyspark==2.4.0 固定(对齐 CDH 6.3.2 parcel 自带版本):`pip install` 把 pyspark 装进解释器 site-packages 解决 PyCharm 远程解释器静态索引红线 + 本地 pytest;运行时 `findspark.init()` 指向集群 `$SPARK_HOME/python/`,两条链路同版本不冲突
|
|
|
-- **TODO 评估 `findspark` 移除**:`findspark` 原本解决的是 Spark Python 代码不在 `sys.path` 的问题(HDP 时代常见);CDH + pip 安装的 pyspark 情境下,解释器 site-packages 自带 pyspark 包已能直接 `import pyspark`,再配合 `SPARK_CONF_DIR=/etc/spark/conf`(`01-运行环境.md §4`)完成 spark-env.sh / hive-site.xml 加载,`findspark.init()` 的价值趋近于零。评估时机:当前阶段 1-3 以稳定为先,保留不拆;阶段 5 老残留清理时一并 drop 依赖 + `dw_base/__init__.py:9` 的 import 与 `:127` 的 `findspark.init()` 调用
|
|
|
+- pyspark==2.4.0 固定(对齐 CDH 6.3.2 parcel 自带版本):`pip install` 把 pyspark 装进解释器 site-packages 解决 PyCharm 远程解释器静态索引红线 + 本地 pytest;集群运行时同一解释器的 site-packages pyspark 直接命中,HMS 走 `SPARK_CONF_DIR=/etc/spark/conf/hive-site.xml`(见 `01-运行环境.md §4`)
|
|
|
+- `findspark` 已于 2026-04-21 随 §三 瘦身删除(冒烟确认其在 CDH + pip pyspark 情境下只做同版本同路径覆盖,行为无差异,详见 `92-进度.md` changelog)
|
|
|
|
|
|
### 7.2 日志改进
|
|
|
|