为了账号安全,请及时绑定邮箱和手机立即绑定

尝试将架构应用于 JSON 数据时,SPARK 数据帧返回 null

尝试将架构应用于 JSON 数据时,SPARK 数据帧返回 null

拉丁的传说 2023-10-13 16:20:18
我使用 SPARK Java API 读取文本文件,将其转换为 JSON,然后对其应用架构。架构可能会根据数据库中的映射表而有所不同,这就是为什么我需要首先将文件转换为 JSON,以便架构映射不必按列顺序。这是我所做的:// Defined the schema (basic representation)StructType myschema = new StructType().add("a", DataTypes.StringType, true)                                      .add("b", DataTypes.StringType, true)                                      .add("x", DataTypes.StringType, true)                                      .add("y", DataTypes.IntegerType, true)                                      .add("z", DataTypes.BooleanType, true);//Reading a pipe delimited text file as JSON, the file has less columns than myschemaDataset<String> data = spark.read().option("delimiter","|").option("header","true").csv(myFile).toJSON();上表返回类似这样的内容:data.show(false);|value|+----------------------------------------+|      {"x":"name1","z":"true","y":"1234"}||      {"x":"name2","z":"false","y":"1445"}||      {"x":"name3","z":"true",:y":"1212"}|当我运行这个时,我的问题出现了:Dataset<Row> data_with_schema = spark.read().schema(myschema).json(data);因为我的结果变成了这样:data_with_schema.show(false);|x|y|z|+-------+-------+-------+|null  |null  |null  ||null  |null  |null  ||null  |null  |null  |我在 stackoverflow 上读到这可能是因为我试图将 json 字符串转换为整数。但是,我尝试将数据变量定义为行数据集而不是字符串数据集,但出现不兼容类型错误。我不确定解决方法是什么或真正的问题是什么。
查看完整描述

3 回答

?
四季花海

TA贡献1811条经验 获得超5个赞

找出问题所在:

如果输入文件中的数据无法应用架构,则表中的所有数据都会返回 Null。例如:“1n”不可能转换为整数。如果将 DataTypes.IntegerType 应用于包含“1n”的列,则整个表都具有空值。


查看完整回答
反对 回复 2023-10-13
?
小怪兽爱吃肉

TA贡献1852条经验 获得超1个赞

我认为发生这种情况是由于 JSON 和定义的架构中的数据类型不匹配。例如,在 JSON 属性中,“age”为整数,但 schema 定义了“age”为 String 类型。由于这种不匹配,所有数据都为空。



查看完整回答
反对 回复 2023-10-13
?
跃然一笑

TA贡献1826条经验 获得超6个赞

不确定这是否有帮助,但在 Spark 中读取 JSON 文件时,请确保架构和 JSON 文件中的列名称完全匹配。否则它将显示空值。



查看完整回答
反对 回复 2023-10-13
  • 3 回答
  • 0 关注
  • 80 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信