代码之家  ›  专栏  ›  技术社区  ›  UserASR

在列中的映射中添加映射

  •  0
  • UserASR  · 技术社区  · 3 年前

    Metadata 专栏我有 Map 类型值:

    +-----------+--------+-----------+--------------------------------+
    |       Noun| Pronoun|  Adjective|Metadata                        |
    +-----------+--------+-----------+--------------------------------+
    |      Homer| Simpson|Engineer   |["Age": "50", "Country": "USA"] | 
    |      Elon | Musk   |King       |["Age": "45", "Country": "RSA"] |
    |      Bart | Lee    |Cricketer  |["Age": "35", "Country": "AUS"] |
    |      Lisa | Jobs   |Daughter   |["Age": "35", "Country": "IND"] |
    |      Joe  | Root   |Player     |["Age": "31", "Country": "ENG"] |
    +-----------+--------+-----------+--------------------------------+
    

    我想附加另一个 地图 在中键入值 元数据 针对一个名为 tags

    +-----------+--------+-----------+--------------------------------------------------------------------+
    |       Noun| Pronoun|  Adjective|Metadata                                                            |
    +-----------+--------+-----------+--------------------------------------------------------------------+
    |      Homer| Simpson|Engineer   |["Age": "50", "Country": "USA", "tags": ["Gen": "M", "Fit": "Yes"]] | 
    |      Elon | Musk   |King       |["Age": "45", "Country": "RSA", "tags": ["Gen": "M", "Fit": "Yes"]] |
    |      Bart | Lee    |Cricketer  |["Age": "35", "Country": "AUS", "tags": ["Gen": "M", "Fit": "No"]]  |
    |      Lisa | Jobs   |Daughter   |["Age": "35", "Country": "IND", "tags": ["Gen": "F", "Fit": "Yes"]] |
    |      Joe  | Root   |Player     |["Age": "31", "Country": "ENG", "tags": ["Gen": "M", "Fit": "Yes"]] |
    +-----------+--------+-----------+--------------------------------------------------------------------+
    

    元数据 柱,外部 地图 已经是 typedLit ,不允许在其中添加另一个Map。

    0 回复  |  直到 3 年前
        1
  •  0
  •   marc_s    2 年前

    我使用结构实现了它。它看起来是这样的:

    df.withColumn("Metadata", struct(lit("Age").alias("Age"), lit("Country").alias("Country"), typedLit(tags).alias("tags")))
    

    它不会完全是键值对,但仍然可以使用别名进行查询。