使用 SCALA 解析嵌套 JSON 数据

Parsing Nested JSON Data using SCALA

这是 JSON 文件 [https://drive.google.com/file/d/1Jb3OdoffyA71vYfojxLedZNPDLq9bn7b/view?usp=sharing]

我是 SCALA 的新手,我正在学习如何使用 SCALA 解析 JSON 文件并将它们作为 table 提取到 Spark 中。我知道如何在 Python 中执行此操作,但我在 SCALA 中遇到问题。

解析下面的JSON文件后table/dataframe会是这样

  id          pub_date      doc_id       unique_id     c_id    p_id    type      source
lni001        20220301      7098727     64WP-UI-POLI    002     P02    org      internet
lni001        20220301      7098727     64WP-UI-POLI    002     P02    org      internet
lni001        20220301      7098727     64WP-UI-POLI    002     P02    org      internet
lni002        20220301      7097889     64WP-UI-CFGT    012     K21   location  internet
lni002        20220301      7097889     64WP-UI-CFGT    012     K21   location  internet

如果我能得到一些关于如何做到这一点的帮助或想法,那就太好了。谢谢!

这是我使用的代码

import org.apache.spark.sql.SparkSession

val spark = SparkSession
  .builder()
  .appName("Spark SQL basic example")
  .config("spark.some.config.option", "some-value")
  .getOrCreate()

import spark.implicits._

val df = spark.read.option("multiline", true).json("json_path")
df.show()

但是代码无法解析嵌套部分(内容字段)。这是数据的峰值

{
   "id":"lni001",
   "pub_date":"20220301",
   "doc_id":"7098727",
   "unique_id":"64WP-UI-POLI",
   "content":[
      {
         "c_id":"002",
         "p_id":"P02",
         "type":"org",
         "source":"internet"  
      },
      {
         "c_id":"002",
         "p_id":"P02",
         "type":"org",
         "source":"internet" 
      },
      {
         "c_id":"002",
         "p_id":"P02",
         "type":"org",
         "source":"internet" 
      }
   ]
}

您应该指定架构,spark 可能无法在内部推断架构。 你可以这样试试:

  val schema= StructType(Array(
  StructField("id",StringType),
  StructField("pub_date",StringType),
  StructField("doc_id",StringType),
  StructField("unique_id",StringType),
  StructField("content",ArrayType(MapType(StringType,StringType)))))
spark.read
 .option("multiline", true)
 .schema(schema)
 .json("path")
 .show(false)