我有一个文件,正在将其转换为Dataframe。对于模式,我希望从配置文件
中读取它我不想在代码中使用硬编码的架构,因为它可能会随着时间而变化,因此我们将架构放在单独的文件中。
val searchPath = "/hdfs/cbt/dfgdfgdf_fsdfg/data/noheaderfile"
val columns = "Name,ID,Address,City"
val fields = columns.split(",").map(fieldName => StructField(fieldName, StringType,
nullable = true))
val customSchema = StructType(fields)
var dfPivot =spark.read.format("com.databricks.spark.csv").option("header","false").option("inferSchema", "false").schema(customSchema).load(searchPath)
在这里,我想更改下面的代码行。
val columns = "Name,ID,Address,City"
相反,应该有一个包含架构的文件。
请告知。
答案 0 :(得分:2)
您可以在此处找到解决方案:How to create a Schema file in Spark
但是,您需要文件中列的类型
import org.apache.spark.sql.types._
val columns = "Name String,ID String,Address String,City String"
val schema = columns
.split(",")
.map(_.split(" "))
.map(x => StructField(x(0), getType(x(1)), true))
getType
是:
def getType(raw: String): DataType = {
raw match {
case "ByteType" => ByteType
case "ShortType" => ShortType
case "IntegerType" => IntegerType
case "LongType" => LongType
case "FloatType" => FloatType
case "DoubleType" => DoubleType
case "BooleanType" => BooleanType
case "TimestampType" => TimestampType
case _ => StringType
}
}