【发布时间】:2015-10-02 13:43:37
【问题描述】:
我是 Spark 的新手,我正在使用 scala 进行编码。我想从 HDFS 或 S3 读取文件并将其转换为 Spark 数据帧。 Csv 文件的第一行是架构。但是如何创建具有未知列的架构的数据框? 我正在使用以下代码为已知模式创建数据框。
def loadData(path:String): DataFrame = {
val rdd = sc.textFile(path);
val firstLine = rdd.first();
val schema = StructType(firstLine.split(',').map(fieldName=>StructField(fieldName,StringType,true)));
val noHeader = rdd.mapPartitionsWithIndex(
(i, iterator) =>
if (i == 0 && iterator.hasNext) {
iterator.next
iterator
} else iterator)
val rowRDD = noHeader.map(_.split(",")).map(p => Row(p(0), p(1), p(2), p(3), p(4),p(5)))
val dataFrame = sqlContext.createDataFrame(rowRDD, schema);
return dataFrame;
}
【问题讨论】:
-
您可以尝试使用Spark CSV Library of Databricks:github.com/databricks/spark-csv
-
How to read csv file as DataFrame? 的可能副本 spark-csv 库允许您说出是否有标题行
标签: scala csv apache-spark hdfs dataframe