Scala Spark map/Filter抛出java.io.IOException:换行符前面的字节太多:2147483648
我有一个大小为7GB的简单文件,其中每行包含两列,以|分隔。我已经从这个文件创建了RDD,但是当我在这个RDD上使用map或filter转换时,我得到了太多的字节异常 下面是我的文件中的示例数据 1160110000000007 | 33448 116011000000014 | 13520 11601100000000021 | 97132 11601100000000049 | 82891 11601100000000049 | 82890 11601100000000056 | 93014 11601100000000063 | 43434 11601100000000063 | 43434 这是密码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
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具有比预期更少或更多标记的行,或与架构不匹配的标记。这可能对我的情况很有用。如果您提供实际代码+获得的堆栈跟踪,这将非常有用。请使用上面的代码编辑问题。代码在哪里?