You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PySpark中结合GroupBy使用Round函数?

在PySpark中结合GroupBy使用Round函数的实现方法

你需要基于Spark DataFrame,通过GroupBy分组并结合Round函数计算目标结果,以下是对应需求的两种实现方式,先完成数据准备:

数据准备

首先初始化SparkSession并将示例数据转换为DataFrame:

from pyspark.sql import SparkSession
from pyspark.sql.functions import count, round, col

spark = SparkSession.builder.appName("GroupByRoundDemo").getOrCreate()

data1 = [
    {'Name':'Jhon','ID':21.528,'Add':'USA','ID_2':'30.90'},
    {'Name':'Joe','ID':3.69,'Add':'USA','ID_2':'12.80'},
    {'Name':'Tina','ID':2.48,'Add':'IND','ID_2':'11.07'},
    {'Name':'Jhon','ID':22.22, 'Add':'USA','ID_2':'34.87'},
    {'Name':'Joe','ID':5.33,'Add':'INA','ID_2':'56.89'}
]

df = spark.createDataFrame(data1)

方法一:使用DataFrame API实现

通过groupBy分组后,用agg统计计数,再用withColumn结合round函数计算百分比并保留1位小数:

result_df = df.groupBy("Name") \
    .agg(
        count("ID").alias("newid"),
        count("ID_2").alias("secondaryid")
    ) \
    .withColumn(
        "NEW_PERCENTAGE",
        round( (col("newid") + col("secondaryid")) / col("newid") * 200, 1 )
    )

result_df.show()

方法二:使用Spark SQL实现

先将DataFrame注册为临时视图,再执行适配Spark SQL语法的查询:

df.createOrReplaceTempView("DATA1")

result_sql = spark.sql("""
    SELECT 
        count(ID) as newid, 
        count(ID_2) as secondaryid, 
        round( (newid + secondaryid)/newid * 200, 1 ) AS NEW_PERCENTAGE 
    FROM DATA1 
    GROUP BY Name
""")

result_sql.show()

输出结果

两种方法会得到完全一致的结果:

+----+-----+-----------+--------------+
|Name|newid|secondaryid|NEW_PERCENTAGE|
+----+-----+-----------+--------------+
|Joe |    2|          2|         400.0|
|Jhon|    2|          2|         400.0|
|Tina|    1|          1|         400.0|
+----+-----+-----------+--------------+

内容的提问来源于stack exchange,提问作者BigData Lover

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 22:10:11