选择JSON Spark-Json数据集中不存在的字段

时间:2018-07-23 14:26:38

标签: java json apache-spark dataset apache-spark-sql

我正在使用Java-Spark,并且具有如下所示的JSON:

{
      "name": "myname",
       "age":"35"
}

或者:

{
    "name": "myname",
    "age":"35",
    "country":"US"
}

我读到Dataset的内容如下:

Dataset<Row> df = sparkSession.read().json(jsonSet);
Dataset<Row> dfSelect = df.select(cols);//Where cols is Column[]

数组cols包含列nameagecountry,但有时JSON不包含country字段和{{1} }引发异常。

即使JSON文件中不存在该字段,如何选择所有字段?

1 个答案:

答案 0 :(得分:1)

如philantrovert的注释中所建议,读取json文件时可以使用预定义的架构。如果该列在json文件中不存在,则所有值将仅为null。可以使用Java进行以下操作:

List<StructField> fields = new ArrayList<>();
fields.add(DataTypes.createStructField("name", DataTypes.StringType, true));
fields.add(DataTypes.createStructField("age", DataTypes.StringType, true));
fields.add(DataTypes.createStructField("country", DataTypes.StringType, true));
StructType schema = DataTypes.createStructType(fields);

Dataset<Row> df = sparkSession.read().schema(schema).json(jsonSet);

可以根据需要在模式中更改列数据类型。由于select已经包含了所需的列,因此之后无需对列进行df