使用固定架构读取的Spark 2.x数据框

时间:2018-07-26 02:36:02

标签: apache-spark dataframe apache-spark-sql

我正在使用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

但是,我有两种特殊情况:

  1. 我不想在原始json中拥有所有字段,我只想拥有在case类中指定的字段。

  2. 不是每个json都有我在case类中指定的每个字段,在这种情况下,我希望相应的列将填充null

我尝试了上述方法,但事实证明,所有记录在DataFrame中都变成null

有人可以给些提示吗?谢谢!

0 个答案:

没有答案