问题
你正试图读取JSON文件。
你知道文件数据,但是Apache火花JSON返回一个读者零价值。
示例代码
您可以使用该示例代码来重现该问题。
- 创建一个测试在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体育客户端下载
- 读取JSON文件。
% python jsontest = spark.read.option (“inferSchema”,“真正的”). json (“dbfs: / tmp / json / parse_test.txt”)显示(jsontest)
- 结果是一个null值。
导致
- 在火花2.4及以下,JSON解析器允许空字符串。只有特定的数据类型,如IntegerType被视为零空的时候。
- 在火花3.0及以上,JSON解析器不允许空字符串。所有数据类型是抛出一个异常,除了BinaryType和StringType。
有关更多信息,审查火花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)