同样是清洗+转换,Lambda / Glue / EMR 三选一怎么选?这章用 japanese-climb 的 pack.py 当尺子。
japanese-climb 的 src/jclimb/pack.py 把抓取到的日文素材(raw/01_*.txt + transcripts/<video-id>/)转换成结构化学习包:axis.md、grid.json、vocab.md、patterns.md、knowledge.md。一次 pack 处理 ~5 个文件,~30 MB 文本,跑 PySpark-ish 的清洗+提取+分级逻辑,单次 ~3 分钟。要搬到 AWS 跑,选哪个?
🎣 钩子:3 分钟、30MB——Lambda 看着也能跑啊,为啥非要 Glue?
👶 深入浅出 :
对应代码:src/jclimb/pack.py + src/jclimb/pre_teach.py + src/jclimb/atom_catalog.py
当前实现:CLI 或 FastAPI 进程里跑 OpenAI 调用 + 文本处理,写文件到 ~/输出练习/<topic>/pack/。本地单文件流。
搬 AWS 完整链路:
s3://japanese-climb/raw/<topic>/pack.py 的 PySpark 改写:UDF 调 Bedrock 抽 vocab/patterns,按难度分级,写 Parquets3://japanese-climb/curated/<topic>/{vocab,patterns,knowledge}/year=.../month=.../vocab、patterns、knowledge 表data/curriculum/ja/ 现在要写脚本遍历,那时变成 SQLJob Bookmark 用上之后:你新加了一个 raw 文件,Glue 只处理新文件不重跑全部——成本和时间都省。
变体 1:团队把日志(gzip JSON)每天 1 TB 落 S3,要每小时清洗去重+按用户分区写 Parquet 入数据湖。最合适?
✅ B:1 TB/小时是 Glue 标准甜区。EMR on EC2 启停延迟大;Lambda 单文件几百 MB 内存就爆;Athena CTAS 是一次性查询场景不适合定时调度。
变体 2:Glue Job 跑完了,但 Athena 查不到新写入的 Parquet 数据。最可能的原因?
✅ B:分区表写入 S3 后必须把分区注册到 Catalog,否则 Athena 查不到。三种解法:① Glue Job 用 enableUpdateCatalog 自动;② 跑 MSCK REPAIR TABLE;③ Crawler 定时扫。Athena 读 Catalog 不是直接列 S3。