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