algorithm - 排序算法 : Big text file with variable-length lines (comma-separated values)

标签 algorithm language-agnostic file sorting lines

对于大于可用内存(数十千兆字节)且包含可变长度记录的文本文件进行排序,什么是好的算法?我见过的所有算法都假设 1) 数据适合内存,或 2) 记录是固定长度的。但是想象一下我想按“出生日期”字段(第 4 个字段)排序的大 CSV 文件:

Id,UserId,Name,BirthDate
1,psmith,"Peter Smith","1984/01/01"
2,dmehta,"Divya Mehta","1985/11/23"
3,scohen,"Saul Cohen","1984/08/19"
...
99999999,swright,"Shaun Wright","1986/04/12"
100000000,amarkov,"Anya Markov","1984/10/31"

我知道:

  1. 这将在一台 机器(非分布式)上运行。
  2. 我要运行它的机器会有多个处理器。
  3. 我要排序的文件可能大于机器的物理内存。
  4. 一个文件包含可变长度的行。每行将包含固定数量的列(分隔符分隔的值)。文件将按特定字段(即文件中的第 4 个字段)排序。
  5. 理想的解决方案可能是“使用这个现有的排序实用程序”,但我正在寻找最好的算法
  6. 我不希望得到完整编码的有效答案;更多的内容是“检查一下,这是它的工作原理,或者这就是为什么它能很好地解决这个问题。”我只是不知道去哪里看...
  7. 这不是家庭作业!

谢谢! ♥

最佳答案

这类算法称为外部排序。我将从检查 Wikipedia entry 开始.它包含一些讨论和指示。

关于algorithm - 排序算法 : Big text file with variable-length lines (comma-separated values),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4453434/

相关文章:

c# - 在没有try catch的情况下检查文件是否正在使用?

file - 使用 Powershell 获取列在 "Details"选项卡中的属性

arrays - 确定数组/字符串中最大匹配序列的有效方法(在 Ruby 中)?

algorithm - 树中最小-最大的正确实现

language-agnostic - 如何在 Web 应用程序中显示浏览器的本地时间

mysql - 防止SQL蠕变的最佳做法是什么?

Javascript检查文件是否存在

java - 从一组正数和负数中找到所有可能等于 0 的子集和?

algorithm - 为什么 karatsuba 的复杂度不是 O(n^2)?

language-agnostic - iTunes COM 接口(interface) - 获取添加到库中的歌曲?