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)我也尝试过,但没有运气。
关于如何做有什么想法吗?
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)