在 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中文网其他相关文章!