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



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

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

是否可以将架构(即"PROPERTY_ID_2222"、"int"one_answers"OWNER_ID_2222"、"int"(保存在文件中,并从中调用该架构?

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

您可以将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来清除语法。

最新更新