在 Spark 中,可以使用多種方法向 DataFrame 新增每行具有特定值的常數列。
在Spark 1.3 及以上版本中,lit 函數用於建立一個文字值,它可以用作DataFrame.withColumn 的第二個參數來新增常數列:
from pyspark.sql.functions import lit df.withColumn('new_column', lit(10))
對於更複雜的列,可以使用array、map 和struct 等函數來建立所需的列值:
from pyspark.sql.functions import array, map, struct df.withColumn("some_array", array(lit(1), lit(2), lit(3))) df.withColumn("some_map", map(lit("key1"), lit(1), lit("key2"), lit(2)))
Spark 2.2 引入了typedLit 函數,它支援提供Seq、Map 和Tuple 作為常數:
import org.apache.spark.sql.functions.typedLit df.withColumn("some_array", typedLit(Seq(1, 2, 3))) df.withColumn("some_struct", typedLit(("foo", 1, 0.3)))
作為使用文字值的替代方法,可以建立一個為每行傳回常數值的使用者定義函數(UDF),並使用該UDF 新增列:
from pyspark.sql.functions import udf, lit def add_ten(row): return 10 add_ten_udf = udf(add_ten, IntegerType()) df.withColumn('new_column', add_ten_udf(lit(1.0)))
注意:
常數值也可以使用相同的建構作為參數傳遞給UDF 或SQL 函數。
以上是如何在 Spark DataFrame 中新增常數列?的詳細內容。更多資訊請關注PHP中文網其他相關文章!