Apache Spark中from_json函数未按预期工作的问题解决
问题原因
你当前代码里的as("json")是给整个Dataset<Row>设置别名,而非给from_json函数生成的结构列重命名,所以该列默认保留了函数调用式的名称from_json(value),后续的select("json.*")无法正确展开这个结构列的字段,最终导致Schema不符合预期。
修复方案
只需要给from_json的结果列显式设置别名json,而非给Dataset设置别名,修改后的代码如下:
// 给from_json生成的列起别名"json" Dataset<Row> normalizedStream = stream.select(functions.from_json(new Column("value"), dataSchema).alias("json")); Dataset<Data> test = normalizedStream.select("json.*").as(Encoders.bean(Data.class)); test.printSchema();
也可以合并成链式调用简化代码:
Dataset<Data> test = stream.select(functions.from_json(new Column("value"), dataSchema).alias("json")) .select("json.*") .as(Encoders.bean(Data.class)); test.printSchema();
修改后输出的Schema就会变成你预期的样子:
root |-- deviceId: string (nullable = true) |-- temperature: double (nullable = true)
内容的提问来源于stack exchange,提问作者Badhusha
相关产品推荐
相关产品推荐

