我正在使用spark 2.2进行一些数据集成。我对以json格式加载数据有疑问。
假设我们已将SparkSession
初始化为ss
。
我使用以下方式以json格式(每行一个json)加载数据:
val df = ss.read.json(path_to_the_json_file)
但是,我想要的是在加载json数据时修复模式,我知道有办法,即在读取json时指定模式:
val df = ss.read.schema(schema).json(path_to_json_file)
在架构方面,我使用case class
进行了定义:
case class MySchema(id: String, name: String, departmentId: Int)
val schema = Encoders.product[MySchema].schema
但是,我有两种特殊情况:
我不想在原始json中拥有所有字段,我只想拥有在case类中指定的字段。
不是每个json都有我在case类中指定的每个字段,在这种情况下,我希望相应的列将填充null
。
我尝试了上述方法,但事实证明,所有记录在DataFrame中都变成null
。
有人可以给些提示吗?谢谢!