我正在尝试从单个CSV文件创建一个DataSet: val ss:SparkSession = ....
LD_LIBRARY_PATH=/usr/java/jdk1.7/jre/lib/amd64/server
df.count()返回CSV文件中行数的2倍。
FileScanRDD.compute中似乎存在问题。 我正在使用带有scala 2.11的spark版本2.0.1。我不会在这里包含FileScanRDD.scala的全部内容。
在FileScanRDD.compute中有以下内容:
val ddr = ss.read.option("path", path)
var df = ddr.option("sep", ",")
.option("quote", "\"")
.option("escape", "\"") // want to retain backslashes (\) ...
.option("delimiter", ",")
.option("comment", "#")
.option("header", "true")
.option("format", "csv")
ddr.csv(path)
如果我在FileScanRDD.compute或FIleScanRDD.nextIterator中放置断点,则生成的数据集具有正确的行数。
此外,FileScanRDD.scala中的代码是:
private[this] val files = split.asInstanceOf[FilePartition].files.toIterator
如果我在files.hasNext行上设置断点一切都很好;但是,如果我在files.next()行上放置断点,代码将在我继续时失败,因为文件迭代器已变空。禁用断点最终会创建一个数据集,其中csv文件的每一行都是重复的。
因此,似乎多个线程正在使用文件迭代器或下划分值(RDDPartition)并且在我的系统2上工作时间结束处理相同的文件,结果DataSet每个输入有2个副本线。
解析XML文件时,此代码无效。
我无法找到有关此问题的任何问题。 我是否有办法阻止这种行为?