【问题标题】:How to remove elements from Array of StructType?如何从 StructType 数组中删除元素?
【发布时间】:2021-10-23 21:05:40
【问题描述】:

我有一个架构

-- item: array (nullable = true)
 |    |-- element: struct (containsNull = true)
 |    |    |-- key: string (nullable = true)
 |    |    |-- type: string (nullable = true)
 |    |    |-- one: string (nullable = true)
 |    |    |-- two: boolean (nullable = true)
 |    |    |-- three: long (nullable = true)
  1. 我想为数组中的每个键创建一个新列,它的值应该基于类型(如果 item.type = "one",那么该键的值将是 element.one)
  2. 如果它的键等于“电子”,我想从数组中删除 struct(item)

【问题讨论】:

  • 要将结构数组分解为列,您可以使用inline,即df.selectExpr("inline(item)")

标签: scala apache-spark apache-spark-sql user-defined-functions scala-collections


【解决方案1】:

无法准确理解您想要什么,但就像 Kafels 所说,您可以使用 inline 将结构数组分解为行(数组中的每个元素一个)和列,然后您将拥有以下架构:

-- key: string (nullable = true)
-- type: string (nullable = true)
-- one: string (nullable = true)
-- two: boolean (nullable = true)
-- three: long (nullable = true)

然后用df.filter(col("item") != "electronic")过滤“电子”项目

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-09
    • 2013-09-01
    • 2020-04-16
    • 1970-01-01
    • 2011-10-31
    相关资源
    最近更新 更多