使用Miller提取各分组最大值对应的完整行(单遍处理大文件)
问题:用Miller按分组提取最大值对应的完整行
现有data.csv数据如下:
year,value,country 2000,13,ES 2001,18,IT 2002,16,TZ 2003,14,TZ 2004,10,ES
需求:按country分组,提取每个分组中value最大值对应的完整行,期望输出:
year,value_max,country 2000,13,ES 2001,18,IT 2002,16,TZ
使用mlr --csv stats1 -a max -f value -g country仅返回value和country列,缺少year列;且数据量较大,要求实现单遍处理。
解决方案
使用Miller的top命令配合字段重命名,实现单遍扫描完成需求:
mlr --csv top -n 1 -g country -s -value then rename value,value_max data.csv
命令解释:
--csv:指定输入输出为CSV格式top -n 1 -g country -s -value:-g country:按country字段分组-s -value:对每个分组内的行按value字段降序排序(-表示降序)-n 1:每个分组仅保留排序后的第1行(即value最大的行)
then rename value,value_max:将原value列重命名为value_max,匹配期望输出的列名
该命令仅需遍历一次数据,完全满足大数据量下的性能要求。
内容的提问来源于stack exchange,提问作者mikael-s
相关产品推荐
相关产品推荐

