在 Spark DataFrame 中创建常量列
使用适用于所有行的任意值将常量列添加到 Spark DataFrame 可以可以通过多种方式来实现。用于此目的的 withColumn 方法在尝试提供直接值作为其第二个参数时可能会导致错误。
使用文字值 (Spark 1.3 )
要解决此问题,请使用 lit 创建所需值的文字表示:
from pyspark.sql.functions import lit df.withColumn('new_column', lit(10))
创建复杂列 (Spark 1.4 )
对于更复杂的列类型,例如数组、结构体或映射,请使用适当的函数:
from pyspark.sql.functions import array, struct df.withColumn('array_column', array(lit(1), lit(2))) df.withColumn('struct_column', struct(lit('foo'), lit(1)))
类型化文字 (Spark 2.2 )
Spark 2.2 引入了 typedLit,提供了对Seq、Map 和元组:
import org.apache.spark.sql.functions.typedLit df.withColumn("some_array", typedLit(Seq(1, 2, 3)))
使用用户定义函数 (UDF)
或者,创建一个返回常量值的 UDF:
from pyspark.sql import functions as F def constant_column(value): def udf(df): return [value for _ in range(df.count())] return F.udf(udf) df.withColumn('constant_column', constant_column(10))
注意:
这些方法还可以用于将常量参数传递给 UDF 或 SQL 函数。
以上是如何向 Spark DataFrame 添加常量列?的详细内容。更多信息请关注PHP中文网其他相关文章!