Skip to main content
 首页 » 编程设计

python之如何转换 Pyspark 中 Dataframe 中的列表列表,每个列表都列出每个属性的值

2025年01月19日2652php

我有一个列表类型:

[[1, 2, 3], ['A', 'B', 'C'], ['aa', 'bb', 'cc']] 

每个列表都包含属性“A1”、“A2”和“A3”的值。

我想获取下一个数据框:

+----------+----------+----------+  
| A1       | A2       | A3       | 
+----------+----------+----------+  
| 1        | A        | aa       | 
+----------+----------+----------+  
| 2        | B        | bb       | 
+----------+----------+----------+  
| 3        | C        | cc       | 
+----------+----------+----------+  

我该怎么做?

请您参考如下方法:

您可以创建一个以标题作为字段的行类,并使用 zip 按行遍历列表并为每一行构造一个行对象:

lst = [[1, 2, 3], ['A', 'B', 'C'], ['aa', 'bb', 'cc']] 
 
from pyspark.sql import Row 
 
R = Row("A1", "A2", "A3") 
sc.parallelize([R(*r) for r in zip(*lst)]).toDF().show() 
+---+---+---+ 
| A1| A2| A3| 
+---+---+---+ 
|  1|  A| aa| 
|  2|  B| bb| 
|  3|  C| cc| 
+---+---+---+ 

或者如果你安装了 pandas,先创建一个 pandas 数据框;您可以使用 spark.createDataFrame 直接从 pandas 数据框创建 spark 数据框:

import pandas as pd 
headers = ['A1', 'A2', 'A3'] 
 
pdf = pd.DataFrame.from_dict(dict(zip(headers, lst))) 
spark.createDataFrame(pdf).show() 
+---+---+---+ 
| A1| A2| A3| 
+---+---+---+ 
|  1|  A| aa| 
|  2|  B| bb| 
|  3|  C| cc| 
+---+---+---+