我有一个.dat文件,其中(\ u0002 \ n)作为行分隔符,(\ u0001)作为列分隔符。当我使用这种方法时,我只能在spark DataFrame中获得1条记录。
sc.hadoopConfiguration.set("textinputformat.record.delimiter", unescapeJava(rowDelim));
val header = Seq("col0", "col1", "col2")
val schema = StructType(header.map(name => StructField(name, StringType)))
// Load data as RDD
val dataFileTypVal = escapeJava("\u0001");
val datafile = sc.textFile("some dat file path")
// Convert to Row RDD
val rdd1 = datafile.map(_.split( unescapeJava(dataFileTypVal) )).map(arr => Row.fromSeq(arr))
val rdd2 = datafile.map(_.split( unescapeJava(dataFileTypVal) ).to[List]).map(arr => Row.fromSeq(arr))
// Create DataFrame from Row RDD and schema
val df1 = sqlContext.createDataFrame(rdd1, schema)
val df2 = sqlContext.createDataFrame(rdd2, schema)
But df1.show() return only first row
// df1,df2 - >只返回一行。
+----+----+-----+
|col0|col1| col2|
+----+----------+
| A1 | B1 | C1 |
+----+----------+
但我的文件有3行,当我打印为
时,我可以看到显示的所有3行rdd1.collect().foreach(println)
[A1,B1,C1
A2,B2,C2
A3,B3,C3
]
如何将.dat文件中的所有记录存入Dataframe