读取大文件(超过 60GB)并写入新文件
Read Big File (over 60GB) and Write new File
有一个文件大小为 60GB,行数为 200,000,000。文件的有效负载如下所示。
source.txt
0.0 4.6 6.3 3.8 5.0 0.0 -3.8 -5.9 1.5 14.2 0.0 1.0 6.9 5.8 6.1 0.0 5.4 -7.1 0.9 6.8 0.0 -1.8 2.6 0.0 -11.5 -0.0
0.0 13.4 -1.8 5.2 2.4 0.0 -7.1 -12.5 -2.8 11.8 0.0 2.0 5.5 3.5 8.2 0.0 9.2 -18.2 -3.4 1.7 0.0 -16.1 3.2 0.0 9.7 -0.1
0.0 12.2 -2.0 7.2 0.1 0.0 -9.1 -11.8 -2.5 8.8 0.0 1.1 4.6 3.8 8.0 0.0 8.3 -18.5 -5.0 0.6 0.0 -14.3 2.8 0.0 10.6 -0.0
0.0 10.6 -0.6 8.3 -2.2 0.0 -9.4 -8.4 -1.5 5.3 0.0 1.9 3.5 3.6 7.1 0.0 7.6 -16.5 -5.7 0.6 0.0 -9.5 1.9 0.0 7.8 0.0
我想按顺序读取文件并创建一个包含序列号的新文件。待创建文件的payload如下
destination.txt
1: 0.0 4.6 6.3 3.8 5.0 0.0 -3.8 -5.9 1.5 14.2 0.0 1.0 6.9 5.8 6.1 0.0 5.4 -7.1 0.9 6.8 0.0 -1.8 2.6 0.0 -11.5 -0.0
2: 0.0 13.4 -1.8 5.2 2.4 0.0 -7.1 -12.5 -2.8 11.8 0.0 2.0 5.5 3.5 8.2 0.0 9.2 -18.2 -3.4 1.7 0.0 -16.1 3.2 0.0 9.7 -0.1
3: 0.0 12.2 -2.0 7.2 0.1 0.0 -9.1 -11.8 -2.5 8.8 0.0 1.1 4.6 3.8 8.0 0.0 8.3 -18.5 -5.0 0.6 0.0 -14.3 2.8 0.0 10.6 -0.0
4: 0.0 10.6 -0.6 8.3 -2.2 0.0 -9.4 -8.4 -1.5 5.3 0.0 1.9 3.5 3.6 7.1 0.0 7.6 -16.5 -5.7 0.6 0.0 -9.5 1.9 0.0 7.8 0.0
我可以使用 Java 执行以下操作
String filePath = "/filepath";
Path path = Paths.get(filePath+"/source.txt");
BufferedReader bufferedReader = Files.newBufferedReader(path);
Stream<String> lines = bufferedReader.lines();
AtomicLong seq = new AtomicLong(0);
BufferedWriter bufferedWriter = Files.newBufferedWriter(Paths.get(filePath+"/dest.txt"));
lines.forEach(txt -> {
try {
bufferedWriter.append(seq.addAndGet(1) + ":" + txt);
bufferedWriter.newLine();
} catch (IOException e) {
e.printStackTrace();
}
});
但我想知道是否可以使用像 Spark、Storm 或 Hadoop 这样的分布式通用框架。我认为大数据框架让它更快
有些东西可能对 Spark 有帮助。
- 从 CSV 文件创建 RDD
- 结合使用 zipWithIndex、sortBy、map
检查 以获取 zipWithIndex 示例
有一个文件大小为 60GB,行数为 200,000,000。文件的有效负载如下所示。
source.txt
0.0 4.6 6.3 3.8 5.0 0.0 -3.8 -5.9 1.5 14.2 0.0 1.0 6.9 5.8 6.1 0.0 5.4 -7.1 0.9 6.8 0.0 -1.8 2.6 0.0 -11.5 -0.0
0.0 13.4 -1.8 5.2 2.4 0.0 -7.1 -12.5 -2.8 11.8 0.0 2.0 5.5 3.5 8.2 0.0 9.2 -18.2 -3.4 1.7 0.0 -16.1 3.2 0.0 9.7 -0.1
0.0 12.2 -2.0 7.2 0.1 0.0 -9.1 -11.8 -2.5 8.8 0.0 1.1 4.6 3.8 8.0 0.0 8.3 -18.5 -5.0 0.6 0.0 -14.3 2.8 0.0 10.6 -0.0
0.0 10.6 -0.6 8.3 -2.2 0.0 -9.4 -8.4 -1.5 5.3 0.0 1.9 3.5 3.6 7.1 0.0 7.6 -16.5 -5.7 0.6 0.0 -9.5 1.9 0.0 7.8 0.0
我想按顺序读取文件并创建一个包含序列号的新文件。待创建文件的payload如下
destination.txt
1: 0.0 4.6 6.3 3.8 5.0 0.0 -3.8 -5.9 1.5 14.2 0.0 1.0 6.9 5.8 6.1 0.0 5.4 -7.1 0.9 6.8 0.0 -1.8 2.6 0.0 -11.5 -0.0
2: 0.0 13.4 -1.8 5.2 2.4 0.0 -7.1 -12.5 -2.8 11.8 0.0 2.0 5.5 3.5 8.2 0.0 9.2 -18.2 -3.4 1.7 0.0 -16.1 3.2 0.0 9.7 -0.1
3: 0.0 12.2 -2.0 7.2 0.1 0.0 -9.1 -11.8 -2.5 8.8 0.0 1.1 4.6 3.8 8.0 0.0 8.3 -18.5 -5.0 0.6 0.0 -14.3 2.8 0.0 10.6 -0.0
4: 0.0 10.6 -0.6 8.3 -2.2 0.0 -9.4 -8.4 -1.5 5.3 0.0 1.9 3.5 3.6 7.1 0.0 7.6 -16.5 -5.7 0.6 0.0 -9.5 1.9 0.0 7.8 0.0
我可以使用 Java 执行以下操作
String filePath = "/filepath";
Path path = Paths.get(filePath+"/source.txt");
BufferedReader bufferedReader = Files.newBufferedReader(path);
Stream<String> lines = bufferedReader.lines();
AtomicLong seq = new AtomicLong(0);
BufferedWriter bufferedWriter = Files.newBufferedWriter(Paths.get(filePath+"/dest.txt"));
lines.forEach(txt -> {
try {
bufferedWriter.append(seq.addAndGet(1) + ":" + txt);
bufferedWriter.newLine();
} catch (IOException e) {
e.printStackTrace();
}
});
但我想知道是否可以使用像 Spark、Storm 或 Hadoop 这样的分布式通用框架。我认为大数据框架让它更快
有些东西可能对 Spark 有帮助。
- 从 CSV 文件创建 RDD
- 结合使用 zipWithIndex、sortBy、map
检查 以获取 zipWithIndex 示例