向Spark DataFrame 加入常數列
使用Spark DataFrame 時,在某些情況下可能需要新增帶有每行的固定值。然而,一個常見的錯誤是直接使用 withColumn,它的目的是添加計算列。
withColumn 出錯
如果您嘗試直接使用新增常數列withColumn,你會遇到類似如下的錯誤:
AttributeError: 'int' object has no attribute 'alias'
這是因為withColumn 需要一個Column 物件作為第二個參數,它代表一個計算表達式。常數值(例如整數)不是列。
解
要正確新增常數列,請使用 lit 函數建立文字值。此函數將常數值作為參數並傳回Column 物件:
from pyspark.sql.functions import lit
df.withColumn('new_column', lit(10))
複雜列
對於更複雜的常數值,例如陣列或結構體,您可以使用以下函數:
範例:
from pyspark.sql.functions import array, struct, create_map df.withColumn("some_array", array(lit(1), lit(2), lit(3))) df.withColumn("some_struct", struct(lit("foo"), lit(1), lit(.3))) df.withColumn("some_map", create_map(lit("key1"), lit(1), lit("key2"), lit(2)))
範例:範例:
替代方法在Spark 2.2 及更高版本中,typedLit 函數也可以用於為支援的資料類型(例如序列、映射和元組。 另一個選擇是使用UDF,儘管它比使用上面提到的內建函數慢。以上是如何為 Spark DataFrame 新增常數列?的詳細內容。更多資訊請關注PHP中文網其他相關文章!