Zeppelin Notebook列排序异常,如何实现正确数值排序?
问题描述
我用Zeppelin Notebook从AWS Athena读取数据,数据样例如下:
+-----------------+-----------------+ | location | no rain count | +-----------------+-----------------+ | A | 9300 | | B | 977 | | C | 95289 | +-----------------+-----------------+
点击Zeppelin的列排序箭头时,no rain count列会按字母数字逻辑排序,降序结果不符合预期:
+-----------------+-----------------+ | location | no rain count | +-----------------+-----------------+ | A | 9300 | | C | 95289 | | B | 977 | +-----------------+-----------------+
正确的降序排序应该是:
+-----------------+-----------------+ | location | no rain count | +-----------------+-----------------+ | B | 977 | | A | 9300 | | C | 95289 | +-----------------+-----------------+
已尝试操作:
- 手动将列数据类型设置为Integer,但点击排序箭头后自动变回String类型
- 使用CAST函数将列转为INT,问题没有改善
- 直接在Athena中运行查询并排序能得到正确结果,推测是Zeppelin的配置问题
解决方案
以下是几个可尝试的解决方向:
1. 修正Zeppelin Athena解释器的类型映射配置
Zeppelin的Athena解释器可能存在类型映射错误,导致数字类型被识别为字符串:
- 进入Zeppelin的Interpreter页面,找到Athena解释器
- 查看
athena.type.mapping配置项,确认是否将Athena的INT/BIGINT类型正确映射到Zeppelin的数字类型 - 若配置缺失或映射错误,手动添加/修改:
athena.type.mapping=INT:Integer,BIGINT:Long - 保存配置后重启Athena解释器,重新运行查询测试排序
2. 优化查询语句,明确列类型与命名
即使使用CAST,Zeppelin可能因列名含空格等问题无法正确识别类型,可修改查询:
SELECT location, CAST("no rain count" AS INT) AS no_rain_count FROM your_table
使用无空格的列别名,帮助Zeppelin更准确识别数字类型。
3. 绕过Zeppelin客户端排序,在Athena端完成排序
Zeppelin默认可能在客户端侧进行排序,若类型识别错误就会按字符串逻辑排序。可以直接在查询中指定排序,让Athena返回已排好序的结果:
SELECT location, "no rain count" FROM your_table ORDER BY "no rain count" DESC
4. 升级Zeppelin版本排查已知bug
部分旧版本的Zeppelin Athena解释器存在类型识别bug,尝试升级到最新稳定版本,或查看Zeppelin的GitHub Issues确认是否有同类问题的修复记录。
内容的提问来源于stack exchange,提问作者Martin Lopez
相关产品推荐
相关产品推荐

