`
datamachine
  • 浏览: 164072 次
社区版块
存档分类
最新评论

集算器实现外存排序的代码示例

阅读更多

在数据分析计算中,将表中的记录排序,是很常见的需求。集算器中,可以用sort函数为序列或者序表中的数据排序。如果需要排序的数据量巨大,就不能一次将它们读入内存,这样普通的排序方法就无法执行了,此时需要使用外存排序。

 

如,文本文件Order_Foods.txt中,存储了50,000条食品的订单信息:



 

现在,需要将订单中的数据按照以下要求排序:

1、按照食品名称升序排序;

2、按照订单日期升序排序,日期相同的按照食品名称降序排序;

3、先按照订单日期降序排序,日期相同的按照订单金额降序排序。

 

 

在这里50,000条数据并不算很多,我们只是以此为例了解一下如何为大数据排序。在实际应用中,可能会遇到几亿条记录,或者几十上百G的数据文件。

在集算器中,遇到大数据时,需要使用游标来计算,数据表中的记录不会一次全部读出,而是按照设定每次读取一条或多条记录,这就可以避免数据计算时的内存溢出。但是,由于每次读取的都只是部分数据,如果需要对游标中的所有数据进行排序、分组等计算时,是无法直接完成的。集算器中的cs.sortx(x…;n)函数,可以利用外存,根据设定的缓冲区行数n来将游标内的数据逐步读出,分别处理并存储在外存文件中,以避免内存溢出。游标排序的结果仍然是一个游标,读取数据的方法和普通的游标完全相同。

 

下面我们看一下如何对Order_Foods.txt中的数据完成排序:



 

A2中,用文本文件Order_Foods.txt生成游标,用第一行作为列名。A3中使用sortx函数,将A2游标中的数据按照食品名称升序排序。排序时,设定了缓冲区行数是1000,这样每读出1000条记录就排序1次,将结果存为1个临时外存文件,排序完成的结果是一个游标:



 

在用这个游标取数时,将自动将生成的所有外存文件归并,读取出所需数据。如A4中读出了排序后的前1000条记录如下:



 

 

A5中将游标关闭后,刚刚排序时产生的外存文件都会自动清除。由于A3中的游标是由A2中游标生成的,因此A3中的游标关闭之后,A2中的游标也会关闭。如果需要计算按订单日期升序排序再按照食品名称降序排序的结果,需要在A6中重新生成游标。如果需要了解更多关于大数据排序的情况,请参阅http://blog.raqsoft.cn/?p=3063 。

A7中按需要将游标中的数据外存排序。sortx函数中,可以指定多个排序字段或排序表达式,如果某个表达式需要降序排序,需要在排序表达式前添加负号。A7中的排序结果同样是游标:



 

这一次,先在A8中跳过20,000条记录,再在A9中读出排序后的第20,001~21,000条数据如下:



 

游标使用完毕后,需要在A10中将其关闭,这样才能即时清理外存文件。如果游标中的数据全部读完,则会自动关闭,不必再调用cs.close()命令。

在排序表达式前加负号来执行降序排序的方法,不仅适用于A7中的字符类型数据,也适用于日期类型或者数值类型。在A12中执行降序排序时,分别使用了日期类型字段和数值类型字段,A13中读取了排序后数据的前1000条记录如下:



 

 

  • 大小: 98.5 KB
  • 大小: 40.1 KB
  • 大小: 7 KB
  • 大小: 66.7 KB
  • 大小: 7 KB
  • 大小: 68.2 KB
  • 大小: 67.8 KB
0
1
分享到:
评论

相关推荐

    直接插入排序C++代码 VS实现

    - 张琨的《数据结构与算法分析(C++语言版)》则提供了更多实践性的指导和代码示例。 总的来说,直接插入排序是一种基础且实用的排序算法,理解其工作原理和实现方式对学习数据结构和算法非常有帮助。在实际编程中...

    C#实现冒泡排序算法的代码示例

    3. **C#实现冒泡排序的代码示例**: 在提供的代码中,`SumSort`类包含了一个名为`PopSort`的方法,该方法接受一个整数数组作为参数,执行冒泡排序。方法内部有两个嵌套循环,外层循环控制遍历数组的次数,内层循环...

    插入排序算法

    以下是一个简单的C++插入排序代码示例: ```cpp void insertionSort(int arr[], int n) { for (int i = 1; i ; i++) { int key = arr[i]; int j = i - 1; // 将比key大的元素向后移位 while (j >= 0 && arr[j...

    数据结构 折半插入排序

    下面给出题目中提供的C语言代码实现示例,用于更好地理解折半插入排序的实现细节: ```c #include int BinsertSort(int *a, int n) { int i, low, high, mid, k, j; for (i = 2; i ; i++) { a[0] = a[i]; // 将...

    java 冒泡排序 数组冒泡排序

    下面是一个简单的Java代码示例,用于对一个整型数组进行升序排序: ```java public class BubbleSort { public static void bubbleSort(int[] arr) { int n = arr.length; for (int i = 0; i ; i++) { for (int...

    插入法对10个数排序

    在给定的代码示例中,我们看到一个典型的插入排序实现,其中的关键步骤包括: 1. **初始化数组**:首先定义了一个整型数组`a[10]`用于存储待排序的10个整数。通过`scanf`函数从标准输入读取这10个数字,存入数组。 ...

    汇编语言实现三个数按从大到小次序重新存放

    首先,我们来分析一下给定的示例代码,这段代码分为两个部分,一部分是对无符号数的排序,另一部分是对有符号数的排序。 ##### 无符号数排序 ```assembly .486 datasegment use16 buf dw 1001h, 1122h, 4455h data...

    安卓listview相关相关-仿“锤子便签”实现列表长按拖动排序功能.rar

    本示例项目"仿“锤子便签”实现列表长按拖动排序功能"着重于如何模仿锤子便签应用,实现用户可以通过长按列表项并拖动来重新排序的功能。这涉及到安卓UI设计、事件处理和数据管理等多个方面的知识。 首先,我们要...

    C#的几种排序法介绍了“冒泡”,“选择”,等

    在提供的代码示例中,`BubbleSorter`类的`Sort`方法实现了冒泡排序算法,通过`done`变量判断是否完成排序,如果一轮比较没有发生交换,则认为数组已排序完毕,从而提前结束排序过程,提高了效率。 ### 选择排序...

    C语言中八大排序算法.docx

    未提供完整示例代码,但其实现逻辑较为直观,可以通过遍历数组来实现。 **效率分析:** 简单选择排序的时间复杂度同样为 O(n^2),但与其他O(n^2)的排序算法相比,它在交换操作上较少,因此在某些情况下可能更高效。...

    插入类.直接插入排序

    在示例代码中,`keytype`被定义为整型`int`。 ```c typedef int keytype; typedef struct { keytype key; } elemtype; ``` 接下来,我们实现直接插入排序的函数`InsertSort`,它接受一个元素数组`x`和数组的大小`...

    JavaScript数组排序小程序实现解析

    在提供的代码示例中,定义了一个名为`mysort()`的函数,它接受一个数组作为参数,并通过冒泡排序算法实现数字数组的正确排序。 冒泡排序是一种简单的排序算法,其基本思想是通过重复遍历待排序的数列,一次比较两个...

    易语言按钮组件点击排序源码-易语言

    这个代码示例中,`待排序数组` 是需要排序的数组,`i` 和 `j` 作为循环变量,`临时变量` 用于在交换元素时暂存值。通过两层循环,实现了冒泡排序的过程。 通过分析和理解这个源码,你可以了解到易语言如何处理用户...

    php代码-3、插入排序

    插入排序在小规模或部分有序的数据集上表现良好,因为它可以快速地对已排序的部分进行调整。在处理大型无序数据时,更高效的算法如快速排序、归并排序或堆排序可能更适合。 ### 示例代码`main.php` `main.php`文件...

    数据结构和算法的自存程序

    在"test"文件中,可能包含了实现上述数据结构和算法的代码示例,这为学习者提供了一个实践和调试的平台。通过分析和修改这些代码,学习者可以深入理解数据结构和算法的工作原理,提升编程技能。此外,自存程序也是...

    详解C++ 桶排序(BucketSort)

    在上述代码中,通过示例向我们展示了桶排序的具体实现,以及如何在C++语言中使用模板函数来增加代码的通用性和复用性。桶排序是一种高效的排序方法,尤其适用于特定类型的数据集,但其适用范围和效率受到数据分布的...

    自己实现MapReduce-Shuffle过程.zip

    文件`mapreduce`和`mapreducedemo`可能包含示例代码或测试用例,帮助你理解和实现这个过程。通过阅读和学习这些代码,你可以更深入地理解MapReduce-Shuffle的工作原理,以及如何在Java环境中复现这一过程。 总的来...

    spring Data笔记和代码

    代码示例: ```java public interface UserRepository extends JpaRepository, Long> { List<User> findByUsername(String username); User findByEmailAndActive(String email, boolean active); } ``` 在这个...

Global site tag (gtag.js) - Google Analytics