JSON读者解析值为零

当你读一个JSON文件,引发读者JSON返回null值,而不是实际的数据。

写的saritha.shivakumar

去年发表在:2022年5月16日

问题

你正试图读取JSON文件。

你知道文件数据,但是Apache火花JSON返回一个读者价值。

示例代码

您可以使用该示例代码来重现该问题。

  1. 创建一个测试在DBFS JSON文件。
    % python dbutils.fs.rm (“dbfs: / tmp / json / parse_test.txt”) dbutils.fs.put (“dbfs: / tmp / json / parse_test。txt”、“”“{”data_flow ":{“上游”:[{" $ ":{“源”:“输入”},“cloud_type”: "},{" $ ":{“源”:“文件”},“cloud_type”:{“蔚蓝”:“云平台”,“aws”:“云服务”}}]}}”“”)bob体育客户端下载
  2. 读取JSON文件。
    % python jsontest = spark.read.option (“inferSchema”,“真正的”). json (“dbfs: / tmp / json / parse_test.txt”)显示(jsontest)
  3. 结果是一个null值。
    jsontest结果显示空值。

导致

  • 在火花2.4及以下,JSON解析器允许空字符串。只有特定的数据类型,如IntegerType被视为空的时候。
  • 在火花3.0及以上,JSON解析器不允许空字符串。所有数据类型是抛出一个异常,除了BinaryTypeStringType

有关更多信息,审查火花SQL迁移指南

示例代码

JSON的例子显示了错误,因为有两个相同的分类字段的数据。

第一个cloud_type入口是一个空字符串。第二个cloud_type输入的数据。

“cloud_type”:“”“cloud_type”:{“蔚蓝”:“云平台”,“aws”bob体育客户端下载:“云服务”}

由于JSON解析器不允许空字符串在火花3.0及以上,值作为输出返回。

解决方案

设置火花配置(AWS|Azure|GCP)值spark.sql.legacy.json.allowEmptyString.enabled真正的。这配置引发3.0 JSON解析器允许空字符串。

你可以设置此配置集群级别或笔记本级别。

示例代码

% python spark.conf.set (“spark.sql.legacy.json.allowEmptyString。启用”,真的)jsontest1 = spark.read.option (“inferSchema”,“真正的”). json (“dbfs: / tmp / json / parse_test.txt”)显示(jsontest1)

jsontest结果显示实际值。


这篇文章有用吗?