【发布时间】:2021-04-25 01:54:51
【问题描述】:
在用于将数据加载到 Spark 中的 mysql jdbc 数据源中,有一列包含字符串中的 JSON。
// JDBC Connection and load table in Dataframe
val verDf = spark.read.format("jdbc").option("driver", driver).option("url", url).option("dbtable", verticesTable).option("user", user).option("password", pass).load()
verDf.printSchema
root
|-- id: integer (nullable = true)
|-- url: string (nullable = true)
|-- al: string (nullable = true) -->> this is JSON string
|-- batch_id: integer (nullable = true)
|-- x: double (nullable = true)
|-- y: double (nullable = true)
|-- z: double (nullable = true)
|-- size: double (nullable = true)
JSON 在 al 列中,并且只需要单个值。我怎样才能提取它?我见过 from_json/get_json_schema 方法,它看起来既昂贵又笨重 - 应该创建模式,然后将 JSON 解包到 Map 等中。
val schema = schema_of_json(lit(verDf.select($"al").as[String].first))
所以当我在上面运行这条线时,它会超时或运行几分钟(4-8 分钟)。
- 我不明白为什么 - 它应该只占用第一行并解析 json 来生成它的模式。为什么这么长(json 值大约有 1-2 KB,很小的对象)?
- 有没有机会使用一些类似mysql的功能
json_extract()从 JSON 字符串中提取相对较快的值?
【问题讨论】:
标签: json scala apache-spark