java - 使用 Spark 读取整个文件

标签 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。 我想这是因为某些行可能包含奇怪的字符, 这会停止该行的读取。

对于古老的 Java,这个问题可以通过 BufferedReader 来解决,就像 this case 中那样。 。但是,我在文档中没有发现 Spark 的类似内容。

我该如何继续?

最佳答案

我知道您已经至少找到了部分问题并回答了问题,但我想指出另一个问题:您正在计算此 Spark 代码中的字符,但听起来像您正在尝试查找文件大小(以字节为单位)。这些根本不一定是同一件事。

关于java - 使用 Spark 读取整个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24635230/

相关文章:

apache-spark - 根据CSV分号分隔数据在HIVE中创建表

Azure Synapse Spark 池提交失败,错误消息为 "SparkJobDefinitionActionFailed"

hadoop - 有没有办法让 Spark 在不使用 Hadoop 的情况下读取 AWS S3 文件?

java - Java中水平翻转区域

java - 打印 2D Java 数组中的特定列

java - 从 Robolectric 下的服务获取 WindowManager 时出现 NullPointerException

apache-spark - PySpark 中有多个 Python 工作线程(或工作线程)?

apache-spark - Apache Spark : How to Send custom messages from Executor to Driver

java - 如何对属于两个或多个组的列表中的对象进行分组?

java - 如何在按钮单击事件上获取任何项目的输出