pyspark withcolumn 在每行中插入列表

Mri*_*nal 5 python apache-spark-sql pyspark

我有df一个列type,我有两个列表

women = ['0980981', '0987098']
men = ['1234567', '4567854']
Run Code Online (Sandbox Code Playgroud)

现在我想根据type列的值添加另一列,如下所示:

from pyspark.sql import functions as psf
df_ = df.withColumn('new_col', psf.when(psf.col('type') == 'men', men).when(psf.col('type') == 'women', women))
Run Code Online (Sandbox Code Playgroud)

但我想我们不能像Array('1234567', '4567854')在 Scala 中那样直接插入列表。psf.lit(men)我也尝试过,但没有运气。

关于如何做有什么想法吗?

gmd*_*mds 7

Use pyspark.sql.functions.array,它接受一个list列表达式并返回一个类型的单列表达式Array,并结合list对 的理解men

men = ['1234567', '4567854']

df = spark.createDataFrame([['women'], ['men']], 'type: string')
df.withColumn('new_col', F.when(F.col('type') == 'men', F.array([F.lit(string) for string in men]))).show()
Run Code Online (Sandbox Code Playgroud)

输出:

+-----+------------------+
| type|           new_col|
+-----+------------------+
|women|              null|
|  men|[1234567, 4567854]|
+-----+------------------+
Run Code Online (Sandbox Code Playgroud)