JSON文件

你可以阅读JSON文件单行的多行模式。在单行模式下,一个文件可以分为许多部分并行和阅读。在多行模式下,加载一个文件作为一个整体的实体不能是分裂。

为进一步的信息,请参阅JSON文件

选项

看到下面的Apache火花参考文章支持读写选项。

获救的数据列

请注意

该特性支持砖运行时的8.2(不支持)及以上。

获救的数据列确保你永远不会失去或错过在ETL数据。获救的数据列不包含任何数据解析,要么从给定的模式,因为它不见了,因为有一个类型不匹配,或者因为套管列的记录或文件不匹配的模式。获救的数据列作为一个JSON返回包含列获救的blob,和源文件路径的记录(源文件路径可以在砖运行时8.3及以上)。删除源文件路径从获救的数据列,您可以设置SQL配置spark.conf.set (“spark.databricks.sql.rescuedDataColumn.filePath.enabled”,“假”)。您可以通过设置启用获救的数据列选项rescuedDataColumn列的名称,例如_rescued_dataspark.read.option (“rescuedDataColumn”,“_rescued_data”) .format (json) .load(<路径>)

当解析JSON解析器支持三种模式记录:宽容的,DROPMALFORMED,FAILFAST。一起使用时rescuedDataColumn、数据类型不匹配不导致记录被删除DROPMALFORMED模式或抛出一个错误FAILFAST模式。腐败的记录是,不完整或畸形的json是下降或抛出错误。如果你使用的选项badRecordsPath当解析JSON数据类型不匹配不视为不良记录时使用rescuedDataColumn。只有不完整的和畸形的JSON存储在记录badRecordsPath

例子

单行模式

在这个例子中,每行一个JSON对象:

{“字符串”:“string1”,“int”:1,“数组”:【1,2,3),“东西”:{“关键”:“value1”}}{“字符串”:“string2相等”,“int”:2,“数组”:【2,4,6),“东西”:{“关键”:“value2”}}{“字符串”:“string3”,“int”:3,“数组”:【3,6,9),“东西”:{“关键”:“value3”,“extra_key”:“extra_value3”}}

读取JSON数据,使用:

瓦尔df=火花格式(“json”)。负载(“example.json”)

火花自动推断模式。

dfprintSchema
|——数组:数组(可以为空=真正的)||——元素:(containsNull=真正的)|——dict:结构体(可以为空=真正的)||——extra_key:字符串(可以为空=真正的)||——关键:字符串(可以为空=真正的)|——int:(可以为空=真正的)|——字符串:字符串(可以为空=真正的)

多行模式

此JSON对象占用多个行:

({“字符串”:“string1”,“int”:1,“数组”:【1,2,3),“东西”:{“关键”:“value1”}},{“字符串”:“string2相等”,“int”:2,“数组”:【2,4,6),“东西”:{“关键”:“value2”}},{“字符串”:“string3”,“int”:3,“数组”:(3,6,9),“东西”:{“关键”:“value3”,“extra_key”:“extra_value3”}}]

读这个对象,使多行模式:

创建临时视图multiLineJsonTable使用json选项(路径=“/ tmp / multi-line.json”,多行=真正的)
瓦尔mdf=火花选项(“多行”,“真正的”)。格式(“json”)。负载(“/ tmp / multi-line.json”)mdf显示()

字符集显

默认情况下,自动检测到输入文件的字符集。您可以指定字符集显式地使用字符集选择:

火花选项(“字符集”,“UTF-16BE”)格式(“json”)负载(“fileInUTF16.json”)

一些支持数据集包括:utf - 8,UTF-16BE,UTF-16LE,utf - 16,UTF-32BE,UTF-32LE,utf - 32。数据集的完整列表支持甲骨文Java SE,明白了支持的编码

笔记本的例子:读取JSON文件

以下笔记本演示单行模式和多行模式。

读取JSON文件的笔记本

在新标签页打开笔记本