Scala Spark map/Filter抛出java.io.IOException:换行符前面的字节太多:2147483648

Scala Spark map/Filter抛出java.io.IOException:换行符前面的字节太多:2147483648,scala,hadoop,apache-spark,hdfs,Scala,Hadoop,Apache Spark,Hdfs,我有一个大小为7GB的简单文件,其中每行包含两列,以|分隔。我已经从这个文件创建了RDD,但是当我在这个RDD上使用map或filter转换时,我得到了太多的字节异常 下面是我的文件中的示例数据 1160110000000007 | 33448 116011000000014 | 13520 11601100000000021 | 97132 11601100000000049 | 82891 11601100000000049 | 82890 11601100000000056 | 93014

我有一个大小为7GB的简单文件,其中每行包含两列,以|分隔。我已经从这个文件创建了RDD,但是当我在这个RDD上使用map或filter转换时,我得到了太多的字节异常

下面是我的文件中的示例数据

1160110000000007 | 33448

116011000000014 | 13520

11601100000000021 | 97132

11601100000000049 | 82891

11601100000000049 | 82890

11601100000000056 | 93014

11601100000000063 | 43434

11601100000000063 | 43434

这是密码

val input = sparkContext.textFile("hdfsfilePath");

input.filter(x=>x.split("|")(1).toInt > 15000).saveAsTextFile("hdfs://output file path")
下面是我得到的例外

java.io.IOException: Too many bytes before newline: 2147483648
at org.apache.hadoop.util.LineReader.readDefaultLine(LineReader.java:249)
at org.apache.hadoop.util.LineReader.readLine(LineReader.java:174)
at org.apache.hadoop.mapreduce.lib.input.UncompressedSplitLineReader.readLine(UncompressedSplitLineReader.java:94)
at org.apache.hadoop.mapred.LineRecordReader.<init>(LineRecordReader.java:136)
java.io.IOException:换行符前面的字节太多:2147483648
位于org.apache.hadoop.util.LineReader.readDefaultLine(LineReader.java:249)
位于org.apache.hadoop.util.LineReader.readLine(LineReader.java:174)
位于org.apache.hadoop.mapreduce.lib.input.UncompressedSplitLineReader.readLine(UncompressedSplitLineReader.java:94)
位于org.apache.hadoop.mapred.LineRecordReader。(LineRecordReader.java:136)

问题是在使用管道分隔符拆分行时,我的scala代码出现了问题,我已经更改了代码,现在它可以工作了。 下面是更改代码

          val input = sparkContext.textFile("hdfsfilePath");

          input.filter(x=>x.split('|')(1).toInt > 15000).saveAsTextFile("hdfs://output file path")

在split方法中,我需要使用“|”或“\\\\\”,而不是“|”。我最近遇到了这个问题

对我来说,这不是内存问题或scala代码问题

结果是CSV文件不完整/格式不正确,即CSV文件的最后一行被剪短

为了解决这个问题,我使用手动删除了最后一行

sed -i '$d' /fileName
但如果这是您经常遇到的问题,则最好使用databricks spark csv软件包:


它包括:DROPMALFORMED:drops具有比预期更少或更多标记的行,或与架构不匹配的标记。这可能对我的情况很有用。

如果您提供实际代码+获得的堆栈跟踪,这将非常有用。请使用上面的代码编辑问题。代码在哪里?