pyspark将一列dict拆成多列,每列的名字对应dict的key
时间: 2023-12-19 12:56:24 浏览: 122
可以使用pyspark的内置函数explode和getItem来实现将一列dict拆成多列的功能。
假设有一个DataFrame包含一列名为"info"的dict,如下所示:
```python
from pyspark.sql.types import *
from pyspark.sql.functions import *
from pyspark.sql import SparkSession
spark = SparkSession.builder.appName("example").getOrCreate()
data = [("Alice", {"age": 25, "gender": "F"}),
("Bob", {"age": 30, "gender": "M"}),
("Charlie", {"age": 35, "gender": "M"})]
schema = StructType([StructField("name", StringType(), True),
StructField("info", MapType(StringType(), StringType()), True)])
df = spark.createDataFrame(data, schema)
df.show()
```
输出结果如下:
```
+-------+----------------+
| name| info|
+-------+----------------+
| Alice|[age -> 25, gen...|
| Bob|[age -> 30, gen...|
|Charlie|[age -> 35, gen...|
+-------+----------------+
```
现在需要将"info"列拆分成两列,分别为"age"和"gender",则可以使用以下代码:
```python
df = df.select("name", explode("info").alias("key", "value"))
df = df.select("name", col("key").alias("category"), col("value").alias("value"))
df = df.pivot("name", "category", "value")
df.show()
```
其中,第一行代码使用explode函数将"info"列拆分成两列"key"和"value",第二行代码将"key"列重命名为"category",将"value"列重命名为"value",第三行代码使用pivot函数将数据透视成需要的格式。
输出结果如下:
```
+-------+-----+------+
| name| age|gender|
+-------+-----+------+
| Alice| 25| F|
| Bob| 30| M|
|Charlie| 35| M|
+-------+-----+------+
```
可以看到,"info"列已经被成功拆分成了"age"和"gender"两列。
阅读全文