📜  重命名 PySpark DataFrames 聚合的列(1)

📅  最后修改于: 2023-12-03 15:12:28.516000             🧑  作者: Mango

重命名 PySpark DataFrames 聚合的列

在 PySpark 中,我们可以使用聚合操作对 DataFrame 进行分组并计算统计数据。在这个过程中,我们可能需要对聚合后的列名进行修改,以便更容易地理解结果。

本文将介绍如何在 PySpark 中重命名聚合的列。

重命名单个聚合列

我们可以使用 alias 方法来为单个聚合列进行重命名。例如,假设我们有以下 DataFrame:

from pyspark.sql.functions import avg

df = spark.createDataFrame([(1, "A", 10), (1, "B", 20), (2, "C", 15)], ["id", "name", "value"])
result = df.groupBy("id").agg(avg("value"))
result.show()

输出结果为:

+---+----------+
| id|avg(value)|
+---+----------+
|  1|      15.0|
|  2|      15.0|
+---+----------+

现在,我们想将 avg(value) 列重命名为 average,我们可以使用 alias 方法:

renamed_result = result.select("id", result["avg(value)"].alias("average"))
renamed_result.show()

输出结果为:

+---+-------+
| id|average|
+---+-------+
|  1|   15.0|
|  2|   15.0|
+---+-------+

在这个例子中,我们通过 select 方法选择了 idavg(value) 列,并使用 alias 方法将 avg(value) 列重命名为 average

重命名多个聚合列

如果我们有多个聚合列需要重命名,我们可以使用 withColumnRenamed 方法。假设我们有以下 DataFrame:

from pyspark.sql.functions import sum, avg

df = spark.createDataFrame([(1, "A", 10, 100), (1, "B", 20, 200), (2, "C", 15, 150)], ["id", "name", "value1", "value2"])
result = df.groupBy("id").agg(sum("value1"), avg("value2"))
result.show()

输出结果为:

+---+-----------+-----------+
| id|sum(value1)|avg(value2)|
+---+-----------+-----------+
|  1|         30|      150.0|
|  2|         15|      150.0|
+---+-----------+-----------+

现在,我们想将 sum(value1) 列重命名为 totalavg(value2) 列重命名为 average,我们可以使用 withColumnRenamed 方法:

renamed_result = result.withColumnRenamed("sum(value1)", "total").withColumnRenamed("avg(value2)", "average")
renamed_result.show()

输出结果为:

+---+-----+-------+
| id|total|average|
+---+-----+-------+
|  1|   30|  150.0|
|  2|   15|  150.0|
+---+-----+-------+

在这个例子中,我们通过 withColumnRenamed 方法将 sum(value1) 列重命名为 total,将 avg(value2) 列重命名为 average。注意,withColumnRenamed 方法返回一个新的 DataFrame,因此我们需要将结果赋值给一个新的变量。