pyspark是一個強大的分布式計算框架,經常被用於大數據處理。而withColumn方法則是一個常用的函數,用於添加或替換特定列的值。以下是對pysparkwithcolumn做詳細的闡述。
一、添加一列
用withColumn函數添加數據集的新列非常簡單,只需要命名新列並提供其內容即可。
from pyspark.sql.functions import lit df = spark.createDataFrame([(1,'John'),(2,'Jane')],['id','name']) new_col = lit('Unknown') df.withColumn('new_col',new_col).show()
在這個例子中,我們將數據框df中的新列命名為”new_col”,然後將候選列”new_col”附加到原始數據集中。
二、替換一列
與添加新列的方式類似,替換現有列的值是通過用withColumn來實現的。對於替換操作,可以創建一個新的數據框,並在其中映射已有的列名,以及使用替代值。例如:
from pyspark.sql.functions import when df = spark.createDataFrame([(1,'John',22),(2,'Jane',45)],['id','name','age']) df2 = df.withColumn('age', when(df.age == 22, 23).otherwise(df.age)) df2.show()
在此示例中,我們用when()函數將年齡在22歲之上的數據替換為23歲。
三、使用表達式計算一列
使用withColumn進行列之間的計算或表達式運算通常是數據科學家和數據分析員處理數據集的常見任務。
from pyspark.sql.functions import expr df = spark.createDataFrame([(1, 'John', 22), (2, 'Jane', 45)],['id', 'name', 'age']) df2 = df.withColumn('age_squared', expr('age * age')) df2.show()
上面的代碼展示了如何使用withColumn函數將年齡的平方添加到數據框中。
四、使用註冊的函數計算一列
通過withColumn函數,另一種方式增加數據框中列的計算是使用註冊的UDF函數(用戶自定義函數)。例如:
from pyspark.sql.functions import udf from pyspark.sql.types import FloatType df = spark.createDataFrame([(1, 'John', 22), (2, 'Jane', 45)],['id', 'name', 'age']) def increment(x): return (x + 1.0) increment_udf = udf(increment, FloatType()) df2 = df.withColumn('incremented_age', increment_udf(df.age)) df2.show()
上述代碼展示了使用創建的increment()函數,在withColumn函數中使用UDF對數據框的年齡列進行增加。
五、使用多個列進行計算生成新列
進一步,UDF函數可以以多列為輸入、生成一個新列。例如:
from pyspark.sql.functions import udf from pyspark.sql.types import FloatType df = spark.createDataFrame([(1, 'John', 22, 150), (2, 'Jane', 45, 190)],['id', 'name', 'age', 'weight']) def increment(x, y): return (x + y) increment_udf = udf(increment, FloatType()) df2 = df.withColumn('age_and_weight', increment_udf(df.age, df.weight)) df2.show()
上面的代碼展示了如何使用withColumn函數將年齡和體重相加,並將該值存儲到age_and_weight列中。
六、使用when()函數語句時的注意事項
當需要在withColumn函數中使用when()函數語句時,有一些需要注意的事項。如果when()語句中有多個分支條件,則需要使用括號將四個條件組成一個整體。例如:
from pyspark.sql.functions import when, col df = spark.createDataFrame([(1,'John',22, 'male'),(2,'Jane',45,'female')],['id','name','age','gender']) df2 = df.withColumn('age_group',when(col('age').between(20, 30),'20s').when(col('age').between(31, 40),'30s').otherwise('others')) df2.show()
上述代碼中,當年齡在20到30之間時,age_group列的值為”20s”。當年齡在31到40之間時,age_group列的值為”30s”。對於年齡超過40歲的,其值為”others”。
總結
pysparkwithcolumn是進行大數據處理中非常常見的函數,可以用於添加、替換、使用表達式和UDF計算新列等,是進行數據分析工作的重要工具。希望這篇文章對你有所幫助。
原創文章,作者:FLWS,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/133221.html