PySpark DataFrame基于其他列中的值对列进行乘法

PySpark DataFrame基于其他列中的值对列进行乘法,pyspark,apache-spark-sql,Pyspark,Apache Spark Sql,我是Pypark新手。我有一个数据框,比如说 +------------+-------+----+ | id| mode|count| +------------+------+-----+ | 146360 | DOS| 30| | 423541 | UNO| 3| +------------+------+-----+ 我想要一个数据框,当模式为“DOS”时,它有一个新的列“聚合”,当模式为“UNO”时,它有一个新的列 +------

我是Pypark新手。我有一个数据框,比如说

+------------+-------+----+
|          id|  mode|count|
+------------+------+-----+
|     146360 |   DOS|   30|
|     423541 |   UNO|    3|
+------------+------+-----+
我想要一个数据框,当模式为“DOS”时,它有一个新的列“聚合”,当模式为“UNO”时,它有一个新的列

+------------+-------+----+---------+
|          id|  mode|count|aggregate|
+------------+------+-----+---------+
|     146360 |   DOS|   30|       60|
|     423541 |   UNO|    3|        3|
+------------+------+-----+---------+

感谢您的输入和一些指向最佳实践的指针:)

方法1:使用
pyspark.sql.functions
when

从pyspark.sql.functions导入时,col
df=df.withColumn('aggregate',when(col('mode')=='DOS',col('count')*2)。when(col('mode')=='UNO',col('count')*1)。否则('count'))
方法2:将SQL大小写表达式与
selectExpr
一起使用:

df=df.selectExpr(“*”,“模式=='DOS'时的大小写,然后在模式=='UNO'时计数*2,然后计数*1,否则将结束计数为聚合”)
结果是:

+------+----+-----+---------+
|    id|mode|count|aggregate|
+------+----+-----+---------+
|146360| DOS|   30|       60|
|423541| UNO|    3|        3|
+------+----+-----+---------+