首页 > 解决方案 > PySpark 等效于 Scala API 中的函数“typedLit”

问题描述

我们typedLitScala API for Spark中有一个函数可以将 Array 或 Map 添加为列值。

import org.apache.spark.sql.functions.typedLit
val df1 = Seq((1, 0), (2, 3)).toDF("a", "b")

df1.withColumn("seq", typedLit(Seq(1,2,3)))
    .show(truncate=false)

+---+---+---------+
|a  |b  |seq      |
+---+---+---------+
|1  |0  |[1, 2, 3]|
|2  |3  |[1, 2, 3]|
+---+---+---------+

我在 PySpark 中找不到等价物。我们如何在 PySpark 中创建一个以 Array 为列值的列?

标签: scalaapache-sparkpysparkapache-spark-sql

解决方案


pyspark 中还没有等效的函数,但您可以拥有一个数组列,如下所示:

from pyspark.sql.functions import array, lit
df = sc.parallelize([[1,2], [3,4]]).toDF(['a', 'b'])
df.withColumn('seq', array([lit(i) for i in [1,2,3]])).show()

输出:

+---+---+---------+                                                             
|  a|  b|      seq|
+---+---+---------+
|  1|  2|[1, 2, 3]|
|  3|  4|[1, 2, 3]|
+---+---+---------+

推荐阅读