大文件上的结构化数据计算示例

本文介绍了如何使用SPL处理大文件的结构化数据,包括过滤、聚合计算、添加计算列、排序、分组聚合、TopN和并行计算等操作。SPL提供游标对象,允许在内存限制下分批读取和计算大文件数据,通过实例展示了如何在esProc中编写脚本来完成这些任务。
摘要由CSDN通过智能技术生成

在数据分析过程中,经常会处理文本文件中的结构化数据(txt,csv等),有时这些文件还会很大,计算机内存不足以一次性读入。这时,只能将数据分批读入内存,对每批数据计算出临时中间结果,分批处理完以后,再按照计算要求对分批处理结果进行恰当的汇总处理,与一次性装入内存的小文件数据计算有很大的不同。

实现大文件计算需要了解一个重要的概念—游标。我们以前比较熟知的是数据库游标,在数据库中使用游标,可以每次返回部分数据,而不将所有数据同时读入内存。游标类似于一个指针,在读取时会通过移动指针的位置来从结果集中每次提取部分记录。与数据库游标类似,在读取大文件数据时,也需要实现文件游标,它具有以下特点:
1、只用于获取数据,并不用来修改结果集。
2、在读取数据时从前向后只遍历一次。

有了游标对象,就可以把大文件计算步骤依次附加在游标对象上,在进行最后计算时,再逐条取出记录,按附加的步骤进行计算。

本文将以结构化文本文件为例,给出大文件过滤、聚合计算、添加计算列、排序、分组聚合、topN 以及并行计算等目标任务的实现方法,并提供用 esProc SPL 编写的代码示例。esProc 是专业的数据计算引擎,其采用的 SPL 中有完善的游标对象及运算,处理这些运算非常方便。

1. 过滤

过滤就是设置一个条件表达式,然后用每条记录的数据来计算表达式的值,如果计算结果值为真则本条记录有效,需要添加到最后取数的结果集里,否则就丢弃这条记录不用取出。对大文件过滤是一种延迟计算,就是先把过滤表达式记在游标对象上,等到取某条记录时,再计算过滤表达式来决定是否将本记录加入结果集。

示例:在大数据学生成绩文本文件students_scores.txt中,查找10班学生的成绩。列数据间用TAB分隔,部分数据如下图:

 

 

esProc SPL脚本如下:

  A 注释
1 =file("E:/txt/students_scores.txt").cursor@t() @t选项,把第一行读作标题
2 =A1.select(CLASS==10) 筛选出10班的学生成绩,延迟计算
3 =file("E:/txt/students_scores_10.txt").export@t(A2) 将过滤后的数据存入新的文件

2. 聚合计算

聚合计算是对大文件中的所有记录,执行某种统计计算,比如统计总和、平均值、最大值、最小值、计数等。循环遍历游标中所有记录,用每条记录数据计算出当前的聚合统计值,只把统计值存在内存中,而不用保存数据记录,就不会占据太多内存。遍历完毕后就得到最终的统计值。

示例:在大数据学生成绩文本文件students_scores.csv中,列数据间用逗号分隔,部分数据如下图:

 

 

计算语文成绩总分,esProc SPL脚本如下:

  A
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值