如何將 Pandas 轉(zhuǎn)換為 PySpark DataFrame?
Pandas 是一個用于數(shù)據(jù)分析和數(shù)據(jù)處理的 Python 庫。愛掏網(wǎng) - it200.com而 PySpark 是 Apache Spark 的 Python 接口,用于大數(shù)據(jù)處理和分布式數(shù)據(jù)處理。愛掏網(wǎng) - it200.com在數(shù)據(jù)處理時,Pandas 和 PySpark 都各有優(yōu)劣。愛掏網(wǎng) - it200.com但是在某些情況下,可能需要將 Pandas 數(shù)據(jù)框轉(zhuǎn)換為 PySpark 數(shù)據(jù)框,以便于在 PySpark 中進(jìn)行分布式處理和大規(guī)模計算。愛掏網(wǎng) - it200.com
本文將介紹如何將 Pandas 轉(zhuǎn)換為 PySpark DataFrame。愛掏網(wǎng) - it200.com在介紹轉(zhuǎn)換方法之前,先介紹一下 Pandas 和 PySpark 的基本概念和特性。愛掏網(wǎng) - it200.com
Pandas 中的數(shù)據(jù)框是二維的表格結(jié)構(gòu),可以類比于 Excel 中的表格。愛掏網(wǎng) - it200.comPandas 數(shù)據(jù)框的每一列可以是不同的數(shù)據(jù)類型,可以含有空值。愛掏網(wǎng) - it200.comPandas 數(shù)據(jù)框具有以下特性:
- Pandas 數(shù)據(jù)框是基于 NumPy 數(shù)組實現(xiàn)的,因此具有高效數(shù)值計算的能力。愛掏網(wǎng) - it200.com
- Pandas 數(shù)據(jù)框提供了靈活而強(qiáng)大的數(shù)據(jù)分析和數(shù)據(jù)處理能力,例如數(shù)據(jù)清洗、數(shù)據(jù)重構(gòu)、數(shù)據(jù)透視等。愛掏網(wǎng) - it200.com
- Pandas 數(shù)據(jù)框可以直接讀寫多種數(shù)據(jù)格式,包括 CSV、Excel、數(shù)據(jù)庫、JSON、HTML 等。愛掏網(wǎng) - it200.com
下面是一個簡單的 Pandas 數(shù)據(jù)框示例:
import pandas as pd
data = {'name': ['Alice', 'Bob', 'Charlie', 'David'],
'age': [25, 30, 35, 40],
'gender': ['F', 'M', 'M', 'M']}
df = pd.DataFrame(data)
print(df)
輸出結(jié)果:
name age gender
0 Alice 25 F
1 Bob 30 M
2 Charlie 35 M
3 David 40 M
PySpark 數(shù)據(jù)框
PySpark 中的數(shù)據(jù)框是一種基于 RDD 的分布式數(shù)據(jù)集,類似于 Pandas 中的數(shù)據(jù)框。愛掏網(wǎng) - it200.comPySpark 數(shù)據(jù)框的每一列也可以是不同的數(shù)據(jù)類型,可以含有空值。愛掏網(wǎng) - it200.comPySpark 數(shù)據(jù)框具有以下特性:
- PySpark 數(shù)據(jù)框在分布式集群上運(yùn)行,因此可處理大規(guī)模數(shù)據(jù)并兼顧計算效率,適合于大規(guī)模機(jī)器學(xué)習(xí)和數(shù)據(jù)分析。愛掏網(wǎng) - it200.com
- PySpark 數(shù)據(jù)框可以直接讀寫多種數(shù)據(jù)格式,包括 CSV、Parquet、JSON 等。愛掏網(wǎng) - it200.com
- PySpark 數(shù)據(jù)框與 RDD 可以無縫轉(zhuǎn)換,具有完整的彈性分布式數(shù)據(jù)集(RDD)API 進(jìn)行操作。愛掏網(wǎng) - it200.com
下面是一個簡單的 PySpark 數(shù)據(jù)框示例:
from pyspark.sql import SparkSession
spark = SparkSession.builder.appName("example").getOrCreate()
data = [('Alice', 25, 'F'), ('Bob', 30, 'M'), ('Charlie', 35, 'M'), ('David', 40, 'M')]
rdd = spark.sparkContext.parallelize(data)
df = rdd.toDF(['name', 'age', 'gender'])
df.show()
輸出結(jié)果:
+-------+---+------+
| name|age|gender|
+-------+---+------+
| Alice| 25| F|
| Bob| 30| M|
|Charlie| 35| M|
| David| 40| M|
+-------+---+------+
將 Pandas 數(shù)據(jù)框轉(zhuǎn)換為 PySpark 數(shù)據(jù)框
將 Pandas 數(shù)據(jù)框轉(zhuǎn)換為 PySpark 數(shù)據(jù)框的方法有多種,包括使用 PySpark 的 toDF 方法、使用 Arrow、使用 Spark DataFrame 和 Pandas DataFrame 之間的轉(zhuǎn)換等。愛掏網(wǎng) - it200.com
使用 PySpark 的 toDF 方法
首先介紹使用 PySpark 的 toDF 方法將 Pandas 數(shù)據(jù)框轉(zhuǎn)換為 PySpark 數(shù)據(jù)框的方法。愛掏網(wǎng) - it200.comtoDF 方法在 PySpark 2.0 及以上版本中可用。愛掏網(wǎng) - it200.com該方法可以將一個 Pandas 數(shù)據(jù)框轉(zhuǎn)換為 PySpark 數(shù)據(jù)框,同時為每個列指定一個數(shù)據(jù)類型。愛掏網(wǎng) - it200.com
以下示例展示了如何使用 PySpark 的 toDF 方法將 Pandas 數(shù)據(jù)框轉(zhuǎn)換為 PySpark 數(shù)據(jù)框:
from pyspark.sql import SparkSession
from pyspark.sql.types import StructType, StructField, StringType, IntegerType
spark = SparkSession.builder.appName("example").getOrCreate()
data = {'name': ['Alice', 'Bob', 'Charlie', 'David'],
'age': [25, 30, 35, 40],
'gender': ['F', 'M', 'M', 'M']}
df_pd = pd.DataFrame(data)
schema = StructType([
StructField('name', StringType(), True),
StructField('age', IntegerType(), True),
StructField('gender', StringType(), True)])
df_spark = spark.createDataFrame(df_pd, schema)
df_spark.show()
輸出結(jié)果:
+-------+---+------+
| name|age|gender|
+-------+---+------+
| Alice| 25| F|
| Bob| 30| M|
|Charlie| 35| M|
| David| 40| M|
+-------+---+------+
在上面的示例中,首先定義了一個 PySpark 的數(shù)據(jù)框結(jié)構(gòu)(即數(shù)據(jù)框列的數(shù)據(jù)類型)。愛掏網(wǎng) - it200.com然后使用 PySpark 的 createDataFrame 方法將 Pandas 數(shù)據(jù)框轉(zhuǎn)換為 PySpark 數(shù)據(jù)框,并將 PySpark 數(shù)據(jù)框結(jié)構(gòu)指定為創(chuàng)建過程中的參數(shù)。愛掏網(wǎng) - it200.com
注意,使用 toDF 方法進(jìn)行轉(zhuǎn)換,不能指定數(shù)據(jù)類型。愛掏網(wǎng) - it200.com
使用 Arrow
另一種方法是使用 Arrow,這是一種跨語言的統(tǒng)一列式存儲格式。愛掏網(wǎng) - it200.comPandas 可以將其 DataFrame 轉(zhuǎn)換為 Arrow 數(shù)據(jù)格式,PySpark 可以將 Arrow 數(shù)據(jù)轉(zhuǎn)換為 PySpark 數(shù)據(jù)框。愛掏網(wǎng) - it200.com