![](/img/trans.png)
[英]Java read from json file using Apache Spark specifying the Schema
[英]parse file with schema in apache spark
下面是我的spark / SCALA程序,用于读取我的源文件。 (CSV文件)
val csv = spark.read
.format("com.databricks.spark.csv")
.option("header", "true") //reading the headers
// .option("mode", "DROPMALFORMED")
.option("inferSchema", "true")
.load("C:\\TestFiles\\SAP_ENT_INVBAL.csv"); //.csv("csv/file/path") //spark 2.0 api
csv.show()
csv.printSchema()
csv.show()
}
输出包含文件头,但是对于我的处理,我需要不同的命名约定而不是文件头。
我尝试了几种选择,效果很好。
但是我想使我的代码通用。 只需在读取文件时传递模式文件,然后根据模式文件创建带有列的数据框。
请帮助解决此问题。
这是spark-csv文档中有关如何指定自定义架构的示例-
您可以在读取数据时手动指定架构:
import org.apache.spark.sql.SQLContext
import org.apache.spark.sql.types.{StructType, StructField, StringType, IntegerType}
val sqlContext = new SQLContext(sc)
val customSchema = StructType(Array(
StructField("year", IntegerType, true),
StructField("make", StringType, true),
StructField("model", StringType, true),
StructField("comment", StringType, true),
StructField("blank", StringType, true)))
val df = sqlContext.read
.format("com.databricks.spark.csv")
.option("header", "true") // Use first line of all files as header
.schema(customSchema)
.load("cars.csv")
如果只需要重命名列,则可以使用toDF
方法, toDF
传递列的新名称,例如
val csv = spark.read.option("header", "true")
.csv("C:\\TestFiles\\SAP_ENT_INVBAL.csv")
.toDF("newColAName", "newColBName", "newColCName")
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.