从自定义行分隔和自定义列分隔文件从dat文件创建Dataframe

时间:2018-03-06 05:27:52

标签: apache-spark dataframe spark-dataframe rdd databricks

我有一个.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

0 个答案:

没有答案