Spark SQL----JSON文件
Spark SQL可以自动推断JSON数据集的schema,并将其加载为DataFrame。这种转换可以在JSON文件上使用SparkSession.read.json来完成。
请注意,作为json文件提供的文件不是典型的JSON文件。每一行都必须包含一个独立的、自包含的有效JSON对象。有关更多信息,请参阅 JSON Lines文本格式,也称为换行分隔的JSON。
对于常规的多行JSON文件,请将multiLine参数设置为True。
# spark is from the previous example.
sc = spark.sparkContext
# A JSON dataset is pointed to by path.
# The path can be either a single text file or a directory storing text files
path = "examples/src/main/resources/people.json"
peopleDF = spark.read.json(path)
# The inferred schema can be visualized using the printSchema() method
peopleDF.printSchema()
# root
# |-- age: long (nullable = true)
# |-- name: string (nullable = true)
# Creates a temporary view using the DataFrame
peopleDF.createOrReplaceTempView("people")
# SQL statements can be run by using the sql methods provided by spark
teenagerNamesDF = spark.sql("SELECT name FROM people WHERE age BETWEEN 13 AND 19")
teenagerNamesDF.show()
# +------+
# | name|
# +------+
# |Justin|
# +------+
# Alternatively, a DataFrame can be created for a JSON dataset represented by
# an RDD[String] storing one JSON object per string
jsonStrings = ['{"name":"Yin","address":{"city":"Columbus","state":"Ohio"}}']
otherPeopleRDD = sc.parallelize(jsonStrings)
otherPeople = spark.read.json(otherPeopleRDD)
otherPeople.show()
# +---------------+----+
# | address|name|
# +---------------+----+
# |[Columbus,Ohio]| Yin|
# +---------------+----+
数据源选项
JSON的数据源选项可以通过以下方式设置:
- 以下类的.option/.options方法
- DataFrameReader
- DataFrameWriter
- DataStreamReader
- DataStreamWriter
- 下面的内置函数
- from_json
- to_json
- schema_of_json
- CREATE TABLE USING DATA_SOURCE处的OPTIONS子句
| Property Name | Default | Meaning | Scope |
|---|---|---|---|
| timeZone | (spark.sql.session.timeZone配置的值) | 设置字符串,该字符串指示用于格式化JSON数据源或分区值中的时间戳的时区ID。支持以下时区格式: ● Region-based zone ID: 它的形式应该是“地区/城市”,例如“America/Los_Angeles”。 ● Zone offset:它的格式应为“(+|-)HH:mm”,例如“-08:00”或“+01:00”。“UTC”和“Z”也支持作为“+00:00”的别名。不建议使用其他短名称,如“CST”,因为它们可能不明确。 | read/write |
| primitivesAsString | false | 将所有原始类型值推断为字符串类型。 | read |
| prefersDecimal | false | 将所有浮点值推断为十进制类型。如果值不适合十进制,则将其推断为double。 | read |
| allowComments | false | 忽略JSON记录中Java/C++风格的注释。 | read |
| allowUnquotedFieldNames | false | 允许不带引号的JSON字段名称。 | read |
| allowSingleQuotes | true | 除了双引号之外,还允许单引号。 | read |
| allowNumericLeadingZeros | false | 允许数字的前导零 (e.g. 00012). | read |
| allowBackslashEscapingAnyCharacter | false | 允许使用反斜杠引用机制接受所有字符的引用。 | read |
| mode | PERMISSIVE | 允许在解析期间处理损坏记录的模式。 ● PERMISSIVE: 当遇到损坏的记录时,将格式错误的字符串放入由columnNameOfCorruptRecord配置的字段中,并将格式错误字段设置为null。若要保留损坏的记录,用户可以在用户定义的schema中设置名为columnNameOfCorruptRecord的字符串类型字段。如果schema没有字段,则会在解析过程中删除损坏的记录。在推断模式时,它会在输出schema中隐式添加columnNameOfCorruptRecord字段。● DROPMALFORMED: 忽略整个损坏的记录。JSON内置函数不支持此模式。● FAILFAST: 当遇到损坏的记录时引发异常。 | read |
| columnNameOfCorruptRecord | (spark.sql.columnNameOfCorruptRecord配置的值) | 允许重命名由PERMISSIVE模式创建的字符串格式不正确的新字段。这将覆盖spark.sql.columnNameOfCorruptRecord。 | read |
| dateFormat | yyyy-MM-dd | 设置指示日期格式的字符串。自定义日期格式遵循datetime pattern的格式。这适用于日期类型。 | read/write |
| timestampFormat | yyyy-MM-dd’T’HH:mm:ss[.SSS][XXX] | 设置指示时间戳格式的字符串。自定义日期格式遵循日期时间格式模式。这适用于时间戳类型。 | read/write |
| timestampNTZFormat | yyyy-MM-dd’T’HH:mm:ss[.SSS] | 设置指示不带时区格式的时间戳的字符串。自定义日期格式遵循Datetime Patterns中的格式。这适用于没有时区类型的时间戳,请注意,写入或读取此数据类型时不支持区域偏移和时区组件。 | read/write |
| enableDateTimeParsingFallback | 如果时间解析器策略具有遗留设置,或者没有提供自定义日期或时间戳pattern,则启用。 | 如果值与设置的patterns不匹配,则允许回退到向后兼容的(Spark 1.x和2.0)行为,来解析日期和时间戳。 | read |
| multiLine | false | 每个文件解析一条记录,它可能跨越多行。JSON内置函数忽略此选项。 | read |
| allowUnquotedControlChars | false | 允许JSON字符串包含或不包含无引号的控制字符(值小于32的ASCII字符,包括制表符和换行符)。 | read |
| encoding | 当multiLine设置为true(用于读取)、UTF-8(用于写入)时自动检测 | 对于读取,允许强制设置JSON文件的标准基本编码或扩展编码之一。例如UTF-16BE、UTF-32LE。对于写入,指定已保存json文件的编码(字符集)。JSON内置函数忽略此选项。 | read/write |
| lineSep | \r, \r\n, \n (用于读取), \n (用于写入) | 定义应用于解析的行分隔符。JSON内置函数忽略此选项。 | read/write |
| samplingRatio | 1.0 | 定义用于schema推断的输入JSON对象的一部分。 | read |
| dropFieldIfAllNull | false | 是否在schema推断期间忽略所有空值的列或空数组。 | read |
| locale | en-US | 将locale设置为 IETF BCP 47 格式的语言标记。例如,在解析日期和时间戳时使用locale。 | read |
| allowNonNumericNumbers | true | 允许JSON解析器将一组“非数字”(NaN)令牌识别为合法的浮点值。 ● +INF: 表示正无穷大,以及+Infinity和Infinity的别名。 ● -INF: 表示负无穷大,别名-Infinity。● NaN: 对于其他非数字,比如除以零的结果。 | read |
| compression | (none) | 保存到文件时使用的压缩编解码器。这可以是已知的不区分大小写的缩写名之一(none、bzip2、gzip、lz4、snappy和deflate)。JSON内置函数忽略此选项。 | write |
| ignoreNullFields | (spark.sql.jsonGenerator.ignoreNullFields配置的值) | 生成JSON对象时是否忽略空字段。 | write |
其他通用选项可以在通用文件源选项中找到。
851

被折叠的 条评论
为什么被折叠?



