使用 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)
这是 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)