使用 PySpark 建立新列的 4 種不同方式 - Soner

banq發表於2021-12-25

瞭解如何在 Spark 資料框中建立新列?

我們生活在大資料時代。收集、儲存和傳輸資料變得非常容易。隨著資料量的增加,傳統的工具開始變得不夠用。

當資料太大而無法通過傳統工具和技術進行處理時,我們應該使用允許分散式計算的工具和技術,例如Spark。

Spark 是一種用於大規模資料處理的分析引擎。它讓我們在叢集上分佈資料和計算,以實現顯著的效能提升。

PySpark 是Spark的 Py t hon API。它結合了 Python 的簡單性和 Spark 的效率,這種合作得到了資料科學家和工程師的高度讚賞。

在本文中,我們將介紹使用 PySpark SQL 模組建立新列的 4 種方法。

 

匯入庫並建立 Spark 會話。

from pyspark.sql import SparkSession
from pyspark.sql import functions as F
spark = SparkSession.builder.getOrCreate()

我們還在模組中匯入了函式,因為我們將在建立列時使用其中的一些函式。

下一步是獲取一些資料。我們總是可以通過從外部檔案讀取資料來建立資料框。在本文中,我們將使用該createDataFrame函式建立我們自己的資料框。

data = [
    ("John","Doe",28,45000,1,0,1),
    ("Jane","Doe",26,52000,1,1,1),
    ("Matt","Anderson",34,62000,1,0,0),
    ("Ashley","James",30,58000,1,1,0),
    ("Amber","Murray",24,48000,1,0,0)
]
schema = StructType([
    StructField("FirstName",StringType(),True),
    StructField("LastName",StringType(),True),
    StructField("Age",IntegerType(),True),
    StructField("Salary", IntegerType(), True),
    StructField("Checking", IntegerType(), True),
    StructField("Savings", IntegerType(), True),
    StructField("CreditCard", IntegerType(), True)
  ])
df = spark.createDataFrame(data=data, schema=schema)
df.show()

 

1.建立一個具有常量值的新列

該withColumn函式可用於建立新列。為了建立一個具有常量值的值,我們需要用lit函式指定值,而不管資料型別如何。

df = df.withColumn("IsCustomer", F.lit(1))df.show()

withColumn函式的第一個引數是新列的名稱,第二個引數指定值。

 

2.基於其他列建立一個新列

我們可以使用另一列中的值來計算新列的值。該withColumn功能也允許進行計算。

df = df.withColumn( 
    "NumberOfProducts", 
     F.col("Checking") + F.col("Savings") + F.col("CreditCard") 
)df.select("Checking","Savings","CreditCard","NumberOfProducts").show()

產品數列是支票、儲蓄和信用卡列的總和。我們需要使用該col函式編寫列名。

 

3. 建立條件列

我們可以使用該when函式根據一個或多個條件指定新列的值。

讓我們建立一個列來指示客戶是否至少擁有一種產品。如果產品數量為 1 個或多個,則新列的值為 1。否則為 0。

df = df.withColumn( 
    "HasProduct", 
    F.when(F.col("NumberOfProducts") >= 1, 1).else(0) 
)df.select("NumberOfProducts", "HasProduct").show()

條件col為when函式的第一個引數。然後,我們為符合給定條件的行指定值。為了為不同的條件指定單獨的值,我們可以將when函式組合為一個鏈式操作。不符合任何給定條件的行的值寫入otherwise部件中。

 

4.在select函式內建立一列

該select函式可用於從資料框中選擇列。它與 SQL 的 select 語句非常相似。

我們通常在select函式中寫入列的名稱。我們還可以在select函式中進行計算以建立新列。

df_new = df.select( 
    "FirstName", 
    "LastName", 
    "NumberOfProducts", 
    F.lit(3 - df.NumberOfProducts).alias("Potential") 
)df_new.show()

 

Potential
列顯示可以向客戶銷售多少新產品。因此,它的計算方法是從我們產品組合中的產品總數中減去客戶擁有的產品數量,即 3。

alias方法用於為派生列或計算列分配名稱。

 

結論

我們已經介紹了使用 PySpark SQL 模組建立新列的 4 種不同方法。

需要注意的是,Spark 針對大規模資料進行了優化。因此,在處理小規模資料時,您可能看不到任何效能提升。事實上,在處理小型資料集時,Pandas 的效能可能優於 PySpark。

 

相關文章