Spark SQL:是否可以从外部源读取自定义模式,而不是在spark代码中创建自定义模式?

时间:2018-11-13 07:05:24

标签: scala apache-spark apache-spark-sql

尝试在不进行模式推断的情况下加载csv文件。 通常,我们在Spark代码中将架构创建为StructType。 是否可以将模式保存在外部文件(可能是属性/配置文件)中,并在创建数据框时动态读取它?

val customSchema_v2 = new StructType()
  .add("PROPERTY_ID_2222", "int" )
  .add("OWNER_ID_2222", "int")

是否可以将模式(即“ PROPERTY_ID_2222”,“ int”和“ OWNER_ID_2222”,“ int”)保存在文件中,然后从那里调用模式?

2 个答案:

答案 0 :(得分:1)

StructType和StructField都可以序列化,因此您可以将StructType序列化为文件,并在需要时反序列化

答案 1 :(得分:0)

您可以将JSON用于架构。

import org.apache.spark.sql.types._

val customSchema_v2 = new StructType()
                         .add("PROPERTY_ID_2222", "int" )
                         .add("OWNER_ID_2222", "int")

val schemaString = customSchema_v2.json

println(schemaString)

val loadedSchema = DataType.fromJson(schemaString)

控制台输出:

{"type":"struct","fields":[{"name":"PROPERTY_ID_2222","type":"integer","nullable":true,"metadata":{}},{"name":"OWNER_ID_2222","type":"integer","nullable":true,"metadata":{}}]}

您需要添加从JSNO文件中读取模式的代码。

JSON文件也可以手动创建,并且可以采用漂亮的格式。为了更好地理解它,请添加更多具有不同数据类型的列,并使用 customSchema_v2.prettyJson 学习语法。