十亿行文本挑战赛(The One Billion Row Challenge,1BRC),是今年火遍外网的一项比赛,旨在测试利用Java从文本文件中聚合十亿行数据时的性能极限。参赛者可以使用并行处理、SIMD、优化GC或者其它方式,实现快速计算。
比赛规则
文本文件包含一批气象站的气温数据,每一行都是以
1 | Hamburg;12.0 |
参赛者需要写一段Java程序读取该文件(12GB),并计算每个气象站气温的最小值、最大值和平均值,每个气象站以
1 | {Abha=-23.0/18.0/59.2, Abidjan=-16.2/26.0/67.3, Abéché=-10.0/29.4/69.0, Accra=-10.1/26.4/66.4, Addis Ababa=-23.7/16.0/67.0, Adelaide=-27.8/17.3/58.5, ...} |
简言之,就是读取一个csv文本文件,每行包含一个键值对,键是String类型,值是Double类型,对十亿行数据做group by操作,再计算每个分组的min、max、mean。