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 などにリンクしているため、完全には明確ではありません。 -examples/src/main/java/org/datavec/transform/analysis/IrisAnalysis.java )。ファイルの内容は最初に JavaRDD (潜在的にストリーム) に読み込まれ、その後処理されると想定しています。スキーマは、DataAnalysis 以外では使用されません。
それで、誰かが私がどのように解析するかを理解するのを手伝ってくれませんか(ストリームまたはイテレータとして、最初の行としてヘッダーの説明を持つCSVファイルですか?
彼らの本 (Deep learning:A practices Approach) から、データ変換 (スキーマが使用される) にはスパークが必要であることを理解しています。したがって、コードを次のように書き直しました。
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-column のみを持つように指示すると考えましたが、出力は次のようになります。
[iid、id、性別、idg、.....]