如何从配置文件向数据框中添加架构

时间:2019-05-21 14:26:15

标签: scala apache-spark

我有一个文件,正在将其转换为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"

相反,应该有一个包含架构的文件。

请告知。

1 个答案:

答案 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
  }
}