sách gpt4 ai đã đi

Spark JSON Đọc các trường đầy đủ từ JSON vào lớp trường hợp

In lại 作者:行者123 更新时间:2023-12-05 02:56:53 34 4
mua khóa gpt4 Nike

考虑以下案例类模式,

case class Y (a: String, b: String)
case class X (dummy: String, b: Y)

字段b是可选的,我的一些数据集没有字段b。当我尝试读取不包含的 JSON 字符串时,我收到一个字段丢失异常。

spark.read.json(Seq("{'dummy': '1', 'b': {'a': '1'}}").toDS).as[X]
org.apache.spark.sql.AnalysisException: No such struct field b in a;
at org.apache.spark.sql.catalyst.expressions.ExtractValue$.findField(complexTypeExtractors.scala:85)
at org.apache.spark.sql.catalyst.expressions.ExtractValue$.apply(complexTypeExtractors.scala:53)
at org.apache.spark.sql.catalyst.analysis.Analyzer$$anonfun$resolveExpression$1.applyOrElse(Analyzer.scala:1074)
at org.apache.spark.sql.catalyst.analysis.Analyzer$$anonfun$resolveExpression$1.applyOrElse(Analyzer.scala:1065)
at org.apache.spark.sql.catalyst.trees.TreeNode$$anonfun$transformUp$2.apply(TreeNode.scala:282)
at org.apache.spark.sql.catalyst.trees.TreeNode$$anonfun$transformUp$2.apply(TreeNode.scala:282)
at org.apache.spark.sql.catalyst.trees.CurrentOrigin$.withOrigin(TreeNode.scala:70)

如何自动将 JSON 中不存在的字段反序列化为 null?

1 Câu trả lời

Sẽ b 字段定义为 Option 类型并使用编码器创建结构类型模式。

  • sử dụng .schema 选项和 case class X 传递定义的模式以创建数据集!

Ví dụ:

case class Y (a: String, b: Option[String] = None)
case class X (dummy: String, b: Y)

import org.apache.spark.sql.Encoders

val schema = Encoders.product[X].schema

spark.read.schema(schema).json(Seq("{'dummy': '1', 'b': {'a': '1'}}").toDS).as[X].show()

//+-----+----+
//|dummy| b|
//+-----+----+
//| 1|[1,]|
//+-----+----+

从结构类型中选择 b 列:

spark.read.schema(schema).json(Seq("{'dummy': '1', 'b': {'a': '1'}}").toDS).as[X].
select("b.b").show()

//+----+
//| b|
//+----+
//|null|
//+----+

打印模式:

spark.read.schema(schema).json(Seq("{'dummy': '1', 'b': {'a': '1'}}").toDS).as[X].printSchema

//root
//|-- dummy: string (nullable = true)
//|-- b: struct (nullable = true)
//| |-- a: string (nullable = true)
//| |-- b: string (nullable = true)

关于json - Spark JSON 将 JSON 中完整的字段读取到案例类中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60049650/

34 4 0
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com