Python 如何从多个列表创建PySpark数据帧
PySpark是在分布式计算环境中处理大型数据集的强大工具。数据分析的一个基本任务是将数据转换为可以轻松处理和分析的格式。在PySpark中,数据通常存储在DataFrame中,它是一个以命名列组织的分布式数据集合。
在某些情况下,我们可能希望从多个列表创建一个PySpark DataFrame。当我们有一个不容易从文件或数据库中加载的格式时,这种方法很有用。例如,我们可能有存储在Python列表或NumPy数组中的数据,我们希望将其转换为PySpark DataFrame以进行进一步分析。
在本文中,我们将探讨如何从多个列表创建一个PySpark DataFrame。我们将讨论不同的方法,并提供每种方法的代码示例,包括注释和输出。
将列表转换为NumPy数组,然后再转换为PySpark DataFrame
从多个列表创建一个PySpark DataFrame的方法之一是先将列表转换为NumPy数组,然后使用createDataFrame()
函数从NumPy数组创建一个PySpark DataFrame。这种方法需要使用pyspark.sql.types模块来指定DataFrame的模式。
考虑下面的代码示例。
示例
import numpy as np
from pyspark.sql.types import StructType, StructField, IntegerType
# Define the lists
age = [20, 25, 30, 35, 40]
salary = [25000, 35000, 45000, 55000, 65000]
# Convert the lists to a NumPy array
data = np.array([age, salary]).T
# Define the schema
schema = StructType([
StructField("age", IntegerType(), True),
StructField("salary", IntegerType(), True)
])
# Create the PySpark DataFrame
df = spark.createDataFrame(data.tolist(), schema=schema)
# Show the DataFrame
df.show()
说明
- 首先,我们导入所需的模块- numpy 和 pyspark.sql.types。
-
接下来,我们定义两个列表:age 和 salary。
-
然后,我们使用 np.array() 函数将列表转换为 NumPy 数组,并使用 .T 进行转置。
-
然后,我们使用 StructType() 和 StructField() 函数定义 DataFrame 的模式。在这种情况下,我们定义了两个列- age 和 salary- 具有 IntegerType() 数据类型。
-
最后,我们使用 createDataFrame() 函数创建 PySpark DataFrame,并将转换为列表的 NumPy 数组和模式作为参数。然后,我们使用 show() 函数显示 DataFrame。
输出
+---+------+
|age|salary|
+---+------+
| 20| 25000|
| 25| 35000|
| 30| 45000|
| 35| 55000|
| 40| 65000|
+---+------+
使用PySpark的createDataFrame()方法
在这种方法中,我们将使用PySpark提供的createDataFrame()方法直接从列表中创建PySpark dataframe。我们首先创建一个元组列表,其中每个元组表示数据框中的一行。然后,我们将创建一个定义数据框结构的模式,即列名和数据类型。最后,我们使用createDataFrame()方法通过将元组列表和模式作为参数来创建数据框。
考虑下面的代码。
示例
from pyspark.sql.types import StructType, StructField, IntegerType, StringType
from pyspark.sql import SparkSession
# Initialize SparkSession
spark = SparkSession.builder.appName("Create DataFrame from Lists").getOrCreate()
# Define the data as lists
names = ["Alice", "Bob", "Charlie", "David"]
ages = [25, 30, 35, 40]
genders = ["Female", "Male", "Male", "Male"]
# Define the schema of the dataframe
schema = StructType([
StructField("Name", StringType(), True),
StructField("Age", IntegerType(), True),
StructField("Gender", StringType(), True)
])
# Create a list of tuples
data = [(names[i], ages[i], genders[i]) for i in range(len(names))]
# Create a PySpark dataframe
df = spark.createDataFrame(data, schema)
# Show the dataframe
df.show()
解释
- 首先,我们导入所需的模块- numpy 和 pyspark.sql.types。
-
接下来,我们定义了两个列表:age 和 salary。
-
然后,我们使用 np.array() 函数将列表转换为 NumPy 数组,并使用 .T 进行数组的转置。
-
在此之后,我们使用 StructType() 和 StructField() 函数定义了 DataFrame 的模式。在本例中,我们使用 IntegerType() 数据类型定义了两个列- age 和 salary。
-
最后,我们使用 createDataFrame() 函数创建了 PySpark DataFrame,并将转换为列表的 NumPy 数组和模式作为参数传递。然后,我们使用 show() 函数显示了 DataFrame。
输出
+-------+---+---------------+
| Name |Age| Gender|
+-------+---+----------------+
| Alice | 25 | Female |
| Bob | 30 | Male |
| Charlie | 35 | Male |
| David | 40 | Male |
+-------+---+---------------+
结论
在本文中,我们探讨了两种不同的方法来从多个列表创建PySpark数据框。第一种方法使用Row()函数创建数据行,然后使用createDataFrame()方法创建数据框。第二种方法使用StructType()和StructField()函数定义模式,然后使用带有数据和模式参数的createDataFrame()方法创建数据框。