Spark SQL----JSON文件

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 NameDefaultMeaningScope
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
primitivesAsStringfalse将所有原始类型值推断为字符串类型。read
prefersDecimalfalse将所有浮点值推断为十进制类型。如果值不适合十进制,则将其推断为double。read
allowCommentsfalse忽略JSON记录中Java/C++风格的注释。read
allowUnquotedFieldNamesfalse允许不带引号的JSON字段名称。read
allowSingleQuotestrue除了双引号之外,还允许单引号。read
allowNumericLeadingZerosfalse允许数字的前导零 (e.g. 00012).read
allowBackslashEscapingAnyCharacterfalse允许使用反斜杠引用机制接受所有字符的引用。read
modePERMISSIVE允许在解析期间处理损坏记录的模式。 ● PERMISSIVE: 当遇到损坏的记录时,将格式错误的字符串放入由columnNameOfCorruptRecord配置的字段中,并将格式错误字段设置为null。若要保留损坏的记录,用户可以在用户定义的schema中设置名为columnNameOfCorruptRecord的字符串类型字段。如果schema没有字段,则会在解析过程中删除损坏的记录。在推断模式时,它会在输出schema中隐式添加columnNameOfCorruptRecord字段。● DROPMALFORMED: 忽略整个损坏的记录。JSON内置函数不支持此模式。● FAILFAST: 当遇到损坏的记录时引发异常。read
columnNameOfCorruptRecord(spark.sql.columnNameOfCorruptRecord配置的值)允许重命名由PERMISSIVE模式创建的字符串格式不正确的新字段。这将覆盖spark.sql.columnNameOfCorruptRecord。read
dateFormatyyyy-MM-dd设置指示日期格式的字符串。自定义日期格式遵循datetime pattern的格式。这适用于日期类型。read/write
timestampFormatyyyy-MM-dd’T’HH:mm:ss[.SSS][XXX]设置指示时间戳格式的字符串。自定义日期格式遵循日期时间格式模式。这适用于时间戳类型。read/write
timestampNTZFormatyyyy-MM-dd’T’HH:mm:ss[.SSS]设置指示不带时区格式的时间戳的字符串。自定义日期格式遵循Datetime Patterns中的格式。这适用于没有时区类型的时间戳,请注意,写入或读取此数据类型时不支持区域偏移和时区组件。read/write
enableDateTimeParsingFallback如果时间解析器策略具有遗留设置,或者没有提供自定义日期或时间戳pattern,则启用。如果值与设置的patterns不匹配,则允许回退到向后兼容的(Spark 1.x和2.0)行为,来解析日期和时间戳。read
multiLinefalse每个文件解析一条记录,它可能跨越多行。JSON内置函数忽略此选项。read
allowUnquotedControlCharsfalse允许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
samplingRatio1.0定义用于schema推断的输入JSON对象的一部分。read
dropFieldIfAllNullfalse是否在schema推断期间忽略所有空值的列或空数组。read
localeen-US将locale设置为 IETF BCP 47 格式的语言标记。例如,在解析日期和时间戳时使用locale。read
allowNonNumericNumberstrue允许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

其他通用选项可以在通用文件源选项中找到。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值