Apache spark 在pyspark中减去两行,并将ans追加为新行
我有下面的pyspark数据帧Apache spark 在pyspark中减去两行,并将ans追加为新行,apache-spark,pyspark,apache-spark-sql,Apache Spark,Pyspark,Apache Spark Sql,我有下面的pyspark数据帧 stat col_A col_B col_C col_D count 14 14 14 14 14 75% 4 4001 160987 49 50% 3 3657 131225 38 我想从75%行中减去50%行,然后在同一数据帧中添加新行结果,如下所示:
stat col_A col_B col_C col_D
count 14 14 14 14 14
75% 4 4001 160987 49
50% 3 3657 131225 38
我想从75%行中减去50%行,然后在同一数据帧中添加新行结果,如下所示:
stat col_A col_B col_C col_D
count 14 14 14 14 14
75% 4 4001 160987 49
50% 3 3657 131225 38
result 1 344 26762 11
因为需要对行而不是列进行操作,所以不像人们想象的那么容易。请尝试下面的代码,使用
union
再添加一行:
import pyspark.sql.functions as F
result = df.union(
df.agg(
F.lit('result').alias('stat'),
*[
(
F.max(F.when(F.col('stat') == '75%', F.col(c))) -
F.max(F.when(F.col('stat') == '50%', F.col(c)))
).alias(c)
for c in df.columns[1:]
]
)
)
result.show()
+------+-----+-----+------+-----+
| stat|col_A|col_B| col_C|col_D|
+------+-----+-----+------+-----+
| count| 14| 14| 1414| 14|
| 75%| 4| 4001|160987| 49|
| 50%| 3| 3657|131225| 38|
|result| 1| 344| 29762| 11|
+------+-----+-----+------+-----+
因为需要对行而不是列进行操作,所以不像人们想象的那么容易。请尝试下面的代码,使用
union
再添加一行:
import pyspark.sql.functions as F
result = df.union(
df.agg(
F.lit('result').alias('stat'),
*[
(
F.max(F.when(F.col('stat') == '75%', F.col(c))) -
F.max(F.when(F.col('stat') == '50%', F.col(c)))
).alias(c)
for c in df.columns[1:]
]
)
)
result.show()
+------+-----+-----+------+-----+
| stat|col_A|col_B| col_C|col_D|
+------+-----+-----+------+-----+
| count| 14| 14| 1414| 14|
| 75%| 4| 4001|160987| 49|
| 50%| 3| 3657|131225| 38|
|result| 1| 344| 29762| 11|
+------+-----+-----+------+-----+
谢谢你的回答,这对我很有用。你能解释一下它是如何工作的吗?它通过对所有行进行聚合并只过滤stat为75%或50%的行来获得对应于75%和50%的行。谢谢你的回答,它对我有用。您能解释一下它是如何工作的吗?它通过对所有行进行聚合,只过滤stat为75%或50%的行,从而获得对应于75%和50%的行。