在Spark中向DF读取JSON时如何处理丢失的json对象类型

时间:2018-06-25 17:05:26

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

在Spark中向DF读取JSON时如何处理缺少的JSON对象类型 到案例类

case class userInfo(user_id:String,name:String,div_id:String,div_Name:Option[String])

示例json:

    {"user_id":"123ABC","name":"john","div_id":"Business"}
    {"user_id":"44wsxer","name":"Valenico"}
    {"user_id":"33qwe","name":"Jmayar"}
    {"user_id":"121ioi","name":"xyzz","div_id":"Support"}

如何将上述json读取到DF并为div_Name对象分配null

1 个答案:

答案 0 :(得分:3)

需要两个步骤:

  • 确保在类定义中将可能缺失的字段声明为可空的Scala类型(Option[_]或Java装箱类型)。

    在您的情况下,所有字段均为String,因此不需要其他更改。

  • 确保提供一个schema参数,并且不依赖于模式推断。例如,您可以使用Encoder

    import org.apache.spark.sql.Encoders
    
    val schema = Encoders.product[userInfo].schema
    
    spark.read.schema(schema).json(...)