用Spark读取整个文件

时间:2014-07-08 15:02:41

标签: java apache-spark

我试图使用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。 我想这是因为某些行可能包含奇怪的字符, 停止阅读该行。

使用goold old Java,可以使用BufferedReader解决此问题,例如this case。但是,我在文档中没有发现类似Spark的东西。

我该怎么办?

2 个答案:

答案 0 :(得分:2)

我知道您已经找到了至少部分问题并回答了问题,但我想指出另一个问题:您在此Spark代码中计算字符,但声音就像你试图在 bytes 中找到文件大小一样。这些并不一定是一回事。

答案 1 :(得分:0)

我添加错误,它只是一个整数溢出。我通过将Integer更改为Long来实现它:

JavaRDD<String> txtFile = sc.textFile(path);
JavaRDD<Long> linesLength = txtFile.map(s -> Long.valueOf(s.length()));
Long totalLength = linesLength.reduce((a, b) -> a +b);