📅  最后修改于: 2023-12-03 15:25:14.555000             🧑  作者: Mango
当我们需要将本地的 pandas 数据转换为分布式的 spark 数据时,就需要将 pandas 数据帧转换为 spark 数据帧。下面介绍如何使用 PySpark 将 pandas 数据帧转换为 spark 数据帧。
首先需要安装 PySpark 库,可以使用 pip 安装 PySpark:
pip install pyspark
使用 PySpark 时需要创建 spark 会话,可以使用下面的代码创建本地的 spark 会话:
from pyspark.sql import SparkSession
spark = SparkSession.builder.appName("pandas_to_spark").getOrCreate()
有两种方法可以将 pandas 数据转换为 spark 数据,一种是使用 createDataFrame 方法,另一种是使用 pandas_udf 方法。
使用 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 函数,然后再使用 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.stop()
本文介绍了如何使用 PySpark 将 pandas 数据帧转换为 spark 数据帧,通过对比两种方法的优缺点,可以选择更适合自己的方法。