【问题标题】:How to convert Array<String> to Array<Struct> in spark scala?如何在 spark scala 中将 Array<String> 转换为 Array<Struct>?
【发布时间】:2022-12-17 15:07:09
【问题描述】:

我有一个 JSON 字符串数组,我需要将其解析并转换为一个结构。

反式Df模式:

root
 |-- logs: array (nullable = true)
 |    |-- element: string (containsNull = true)

这是我试过的代码

  val logsSchema = new ArrayType(spark.read.json(transDf.select("logs").as[String]).schema, true)
  transDf = transDf.withColumn("logs", from_json(col("logs"), logsSchema))

但上面的东西只适用于字符串 - >结构但不适用于数组结构。

如何在不知道 JSON 架构的情况下将 JSON 字符串的数组转换为 Array&lt;Struct&gt;

【问题讨论】:

  • 你能打印几行你的transDf数据框吗?这将有助于帮助你:)
  • 不知道在数据量很大的问题中加个动态链接可不可以。所以,这里是没有表格边框的 transDf.select("logs").show(3, false) appp.me/aMhbvo 希望,这会有所帮助
  • 我想你在数组中有 n json 表示。数组中的元素个数是固定的吗?
  • 不,这不是固定的

标签: scala apache-spark


【解决方案1】:

您可以 schema_of_json 函数从 JSON 字符串中获取模式并将其传递给 from_json 函数获取结构类型。

  val logsSchema = schema_of_json(transDf.select("logs").as[String].first())
  transDf = transDf.withColumn("logs", from_json(col("logs"), logsSchema))

【讨论】:

    猜你喜欢
    • 2019-07-25
    • 2019-03-30
    • 2019-03-22
    • 1970-01-01
    • 1970-01-01
    • 2017-06-13
    • 2021-02-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多