JSON文件
你可以阅读JSON文件单行的或多行模式。在单行模式下,一个文件可以分为许多部分并行和阅读。在多行模式下,加载一个文件作为一个整体的实体不能是分裂。
为进一步的信息,请参阅JSON文件。
获救的数据列
请注意
该特性支持砖运行时的8.2(不支持)及以上。
获救的数据列确保你永远不会失去或错过在ETL数据。获救的数据列不包含任何数据解析,要么从给定的模式,因为它不见了,因为有一个类型不匹配,或者因为套管列的记录或文件不匹配的模式。获救的数据列作为一个JSON返回包含列获救的blob,和源文件路径的记录(源文件路径可以在砖运行时8.3及以上)。删除源文件路径从获救的数据列,您可以设置SQL配置spark.conf.set (“spark.databricks.sql.rescuedDataColumn.filePath.enabled”,“假”)
。您可以通过设置启用获救的数据列选项rescuedDataColumn
列的名称,例如_rescued_data
与spark.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”)
火花自动推断模式。
df。printSchema
根|——数组:数组(可以为空=真正的)||——元素:长(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,明白了支持的编码。