如何從多個列表建立 PySpark DataFrame?
PySpark 是一個功能強大的工具,用於在分散式計算環境中處理大型資料集。資料分析中的一個基本任務是將資料轉換為易於處理和分析的格式。在 PySpark 中,資料通常儲存在 DataFrame 中,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。我們將首先建立一個元組列表,其中每個元組表示 DataFrame 中的一行。然後,我們將建立一個模式來定義 DataFrame 的結構,即列名和資料型別。最後,我們將透過將元組列表和模式作為引數傳遞給 createDataFrame() 方法來建立一個 DataFrame。
請考慮以下程式碼。
示例
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 的模式。在本例中,我們定義了兩個列 - age 和 salary - 資料型別為 IntegerType()。
最後,我們使用 createDataFrame() 函式建立 PySpark DataFrame,並將轉換為列表的 NumPy 陣列和模式作為引數傳遞。然後,我們使用 show() 函式顯示 DataFrame。
輸出
+-------+---+---------------+ | Name |Age| Gender| +-------+---+----------------+ | Alice | 25 | Female | | Bob | 30 | Male | | Charlie | 35 | Male | | David | 40 | Male | +-------+---+---------------+
結論
在本文中,我們探討了兩種從多個列表建立 PySpark DataFrame 的不同方法。第一種方法使用 Row() 函式建立資料行,然後使用 createDataFrame() 方法建立 DataFrame。第二種方法使用 StructType() 和 StructField() 函式定義模式,然後使用 createDataFrame() 方法以及資料和模式作為引數建立 DataFrame。