gpt4 book ai didi

json - Spark from_json 没有异常(exception)

转载 作者:行者123 更新时间:2023-12-05 00:03:45 26 4
gpt4 key购买 nike

我正在使用 Spark 2.1(scala 2.11)。

我想将具有定义架构的 json 格式字符串从一个数据帧加载到另一个数据帧中。
我尝试了一些解决方案,但最便宜的是标准列函数 from_json 。
我用这个函数尝试了一个例子(https://jaceklaskowski.gitbooks.io/mastering-spark-sql/spark-sql-functions-collection.html#from_json),它给了我意想不到的结果。

val df = spark.read.text("testFile.txt")

df.show(false)

+----------------+
|value |
+----------------+
|{"a": 1, "b": 2}|
|{bad-record |
+----------------+


df.select(from_json(col("value"),
StructType(List(
StructField("a",IntegerType),
StructField("b",IntegerType)
))
)).show(false)


+-------------------+
|jsontostruct(value)|
+-------------------+
|[1,2] |
|null |
+-------------------+

这种行为类似于 mode:PERMISSIVE ,它不是默认的。
默认情况下,它设置为 FAILFAST 模式,这意味着只要输入数据和强制模式不匹配,它就会抛出异常。

我尝试使用 DataFrameReader(JSON 数据源和 FAILFAST 模式)加载 testFile.txt 并成功捕获异常。
spark.read.option("mode","FAILFAST").json("test.txt").show(false)

---
Caused by: org.apache.spark.sql.catalyst.json.SparkSQLJsonProcessingException: Malformed line in FAILFAST mode: {bad-record
---

虽然两种情况下的解析模式相同,但为什么各自的输出如此不同?

最佳答案

这是预期的行为。 from_json是一个SQL函数,在这一层没有异常(故意的)的概念。如果操作失败,则结果未定义 NULL .

虽然 from_json提供 options参数,它允许您设置 JSON 读取器选项,由于上述原因,无法覆盖此行为。

附注 DataFrameReader 的默认模式是宽容的。

关于json - Spark from_json 没有异常(exception),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54550640/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com