📜  将 pandas 数据帧转换为 spark 数据帧 - Python (1)

📅  最后修改于: 2023-12-03 15:25:14.555000             🧑  作者: Mango

将 pandas 数据帧转换为 spark 数据帧 - Python

当我们需要将本地的 pandas 数据转换为分布式的 spark 数据时,就需要将 pandas 数据帧转换为 spark 数据帧。下面介绍如何使用 PySpark 将 pandas 数据帧转换为 spark 数据帧。

步骤一:安装 PySpark 库

首先需要安装 PySpark 库,可以使用 pip 安装 PySpark:

pip install pyspark
步骤二:创建 spark 会话

使用 PySpark 时需要创建 spark 会话,可以使用下面的代码创建本地的 spark 会话:

from pyspark.sql import SparkSession

spark = SparkSession.builder.appName("pandas_to_spark").getOrCreate()
步骤三:将 pandas 数据转换为 spark 数据

有两种方法可以将 pandas 数据转换为 spark 数据,一种是使用 createDataFrame 方法,另一种是使用 pandas_udf 方法。

方法一:使用 createDataFrame 方法

使用 createDataFrame 方法需要将 pandas 数据转换为列表或元组,然后再使用 createDataFrame 方法创建 spark 数据。

import pandas as pd

# 创建一个 pandas 数据帧
pdf = pd.DataFrame({
    "name": ["Tom", "Jack", "Mary"],
    "age": [28, 25, 32],
    "gender": ["M", "M", "F"]
})

# 将 pandas 数据帧转换为列表
data = pdf.values.tolist()

# 创建 spark 数据帧
df = spark.createDataFrame(data, pdf.columns)

# 显示 spark 数据帧
df.show()

返回的 spark 数据帧如下所示:

+----+---+------+
|name|age|gender|
+----+---+------+
| Tom| 28|     M|
|Jack| 25|     M|
|Mary| 32|     F|
+----+---+------+
方法二:使用 pandas_udf 方法

使用 pandas_udf 方法需要定义一个 pandas 函数,然后再使用 pandas_udf 方法注册这个函数,并使用 selectExpr 方法将数据转换为 spark 数据。

# 定义一个 pandas 函数,将性别转换为大写字母
@pandas_udf("string")
def upper_gender(gender):
    return gender.str.upper()

# 使用 pandas_udf 注册这个函数,并将数据转换为 spark 数据
df = pdf.selectExpr("name", "age", "upper_gender(gender) as gender")

# 显示 spark 数据帧
df.show()

返回的 spark 数据帧如下所示:

+----+---+------+
|name|age|gender|
+----+---+------+
| Tom| 28|     M|
|Jack| 25|     M|
|Mary| 32|     F|
+----+---+------+
步骤四:关闭 spark 会话

使用完 spark 会话后需要关闭 spark 会话,可以使用下面的代码关闭 spark 会话:

spark.stop()

本文介绍了如何使用 PySpark 将 pandas 数据帧转换为 spark 数据帧,通过对比两种方法的优缺点,可以选择更适合自己的方法。