【问题标题】:How to convert Spark map keys to individual columns如何将 Spark 映射键转换为单独的列
【发布时间】:2022-12-06 00:46:13
【问题描述】:

我有一个如下所示的数据框,

----------------------------------------------------
| ID  | Name | Desc_map                            |
----------------------------------------------------
|  1  | abcd | "Company" -> "aa" , "Salary" -> "1" |
|  2  | efgh | "Company" -> "bb" , "Salary" -> "2" |
|  3  | ijkl | "Company" -> "cc" , "Salary" -> "3" |
|  4  | mnop | "Company" -> "dd" , "Salary" -> "4" |
----------------------------------------------------

预期的数据框,

---------------------------------
| ID  | Name | Company | Salary |                            |
---------------------------------
|  1  | abcd |   aa    |   1    |
|  2  | efgh |   bb    |   2    |
|  3  | ijkl |   cc    |   3    |
|  4  | mnop |   dd    |   4    |
---------------------------------

任何帮助表示赞赏。

【问题讨论】:

    标签: apache-spark pyspark apache-spark-sql


    【解决方案1】:

    要将 Spark 映射的键转换为单独的列,您可以使用 pyspark.sql.functions.explode() 函数。此函数将包含映射的列作为输入,并为映射中的每个键值对返回一个新行,键和值作为单独的列。

    下面是一个示例,说明如何使用此函数将 Spark 映射的键转换为单独的列:

    from pyspark.sql import functions as F
    
    # Define a DataFrame with a column that contains a map
    df = spark.createDataFrame([
        (1, {"a": 1, "b": 2, "c": 3}),
        (2, {"d": 4, "e": 5, "f": 6}),
        (3, {"g": 7, "h": 8, "i": 9})
    ])
    
    # Explode the keys of the map as separate columns
    df = df.withColumn("key", F.explode(F.keys("map_col")))
    df = df.withColumn("value", F.explode(F.values("map_col")))
    
    # Print the resulting DataFrame
    df.show()
    

    【讨论】:

      猜你喜欢
      • 2022-10-02
      • 2015-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-06
      • 1970-01-01
      • 1970-01-01
      • 2017-08-24
      相关资源
      最近更新 更多