尝试在不进行模式推断的情况下加载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”)保存在文件中,然后从那里调用模式?
答案 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 学习语法。