我正在尝试使用 Spark 将文件所有行的长度相加。 这些行的格式如下:
A1004AX2J2HXGL\tB0007RT9LC\tMay 30, 2005\t3\n\t4\t5.0\tLes carottes sont cuites
为了实现我的目标,我尝试了 documentation 中给出的代码:
JavaRDD<String> txtFile = sc.textFile(filePath);
JavaRDD<Integer> linesLength = txtFile.map(s -> s.length());
long totalLength = linesLength.reduce((a, b) -> a+b);
但是,它不起作用。例如,对于 5.8GB 文本文件,它应返回 5897600784,但返回 1602633268。 我想这是因为某些行可能包含奇怪的字符, 这会停止该行的读取。
对于古老的 Java,这个问题可以通过 BufferedReader 来解决,就像 this case 中那样。 。但是,我在文档中没有发现 Spark 的类似内容。
我该如何继续?
最佳答案
我知道您已经至少找到了部分问题并回答了问题,但我想指出另一个问题:您正在计算此 Spark 代码中的字符,但听起来像您正在尝试查找文件大小(以字节为单位)。这些根本不一定是同一件事。
关于java - 使用 Spark 读取整个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24635230/