我正在使用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
包含列name
,age
和country
,但有时JSON不包含country
字段和{{1} }引发异常。
即使JSON文件中不存在该字段,如何选择所有字段?
答案 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
。