【问题标题】:spark: convert struct/dictionary to array of structs/dictionariesspark:将结构/字典转换为结构/字典数组
【发布时间】:2019-08-19 21:38:20
【问题描述】:

我的 spark sql 和 scala 代码:

var df = spark.sql(
     s"""
             |SELECT id, a, b, c, d
             |FROM default.table
      """.stripMargin)

var grouped_df = df.withColumn("map", struct("a", "b", "c", "d"))

grouped_df的输出:

{
  "id": 41286786,
  "map": {
    "a": "",
    "b": "724",
    "c": "7425",
    "d": ""
  }
 }

如何获得以下输出或将grouped_df 转换为:

{
  "id": 41286786,
  "array": [
    { "name": "b", "value": "724" },
    { "name": "c", "value": "7245" }
  ]
 }

如何在 spark sql 或 UDF 中做到这一点?

【问题讨论】:

    标签: scala apache-spark apache-spark-sql


    【解决方案1】:

    以下是在 Scala 中使用 DataFrame API 的方法(本机没有 UDF):

    import org.apache.spark.sql.functions.{array, struct, lit}
    
    val result = grouped_df
      .select(
        $"id",
        array(
          struct(lit("b").alias("name"), $"map.b".alias("value")),
          struct(lit("c").alias("name"), $"map.c".alias("value"))
        ).alias("array")
      )
    

    【讨论】:

      猜你喜欢
      • 2019-09-22
      • 2013-12-25
      • 1970-01-01
      • 2018-02-25
      • 1970-01-01
      • 2021-11-10
      • 1970-01-01
      • 1970-01-01
      • 2021-12-21
      相关资源
      最近更新 更多