我正在尝试使用 canova/datavec 加载 CSV 数据集,但找不到执行此操作的“惯用”方式。我有点挣扎,因为我觉得框架在进化,这让我很难确定什么是相关的,什么是不相关的。
object S extends App{
val recordReader:RecordReader = new CSVRecordReader(0, ",")
recordReader.initialize(new FileSplit(new File("./src/main/resources/CSVdataSet.csv")))
val iter:DataSetIterator = new RecordReaderDataSetIterator(recordReader, 100)
while(iter.hasNext){
println(iter.next())
}
}
我有一个以标题描述开头的 csv 文件,因此我的输出是一个例外
(java.lang.NumberFormatException: For input string: "iid":)
我开始研究模式构建器,因为由于模式/标头而出现异常。所以我想添加这样的模式;
val schema = new Schema.Builder()
.addColumnInteger("iid")
.build()
从我的角度来看,noob-view、BasicDataVec-examples 并不完全清楚,因为它们将其链接到 spark 等。来自 IrisAnalysisExample(https://github.com/deeplearning4j/dl4j-examples/blob/master/datavec -examples/src/main/java/org/datavec/transform/analysis/IrisAnalysis.java)。我假设文件内容首先被读入 JavaRDD(可能是 Stream),然后再进行处理。除 DataAnalysis 外,不使用架构。
那么,有人可以帮助我理解我是如何解析的(作为流或迭代器,一个以标题描述作为第一行的 CSV 文件?
我从他们的书(深度学习:从业者方法)中了解到,数据转换(使用模式)需要火花。因此,我将代码重写为;
object S extends App{
val schema: Schema = new Schema.Builder()
.addColumnInteger("iid")
.build
val recordReader = new CSVRecordReader(0, ",")
val f = new File("./src/main/resources/CSVdataSet.csv")
recordReader.initialize(new FileSplit(f))
val sparkConf:SparkConf = new SparkConf()
sparkConf.setMaster("local[*]");
sparkConf.setAppName("DataVec Example");
val sc:JavaSparkContext = new JavaSparkContext(sparkConf)
val lines = sc.textFile(f.getAbsolutePath);
val examples = lines.map(new StringToWritablesFunction(new CSVRecordReader()))
val process = new TransformProcess.Builder(schema).build()
val executor = new SparkTransformExecutor()
val processed = executor.execute(examples, process)
println(processed.first())
}
我现在认为架构会规定我只有 iid 列,但输出是:
[iid, id, 性别, idg, .....]