显式指定用于读取JSON的模式并将缺少的字段标记为null

时间:2018-05-09 13:18:37

标签: java json apache-spark

我正在生成DataSet<Person>,如此:

DataSet<Person> personDs = sparkSession.read().json("people.json").as(Encoders.bean(Person.class));

其中Person

class Person {
    private String name;
    private String placeOfBirth;

    //Getters and setters
    ...
}

如果我的输入数据只包含名称({"name" : "bob"}),则会收到错误org.apache.spark.sql.AnalysisException: cannot resolve 'placeOfBirth' given input columns: [name]

有没有办法告诉Spark,placeOfBirth(或任何其他字段)可以是null

1 个答案:

答案 0 :(得分:1)

在Spark 2.3.0和Scala 2.11.12中,代码对我有用:

sparkSession.read.schema("name String, placeOfBirth String").json("people.json").as(Encoders.bean(classOf[Person])).show()

输出:

+----+------------+
|name|placeOfBirth|
+----+------------+
| bob|        null|
+----+------------+