Pyspark 获得总数 table

Pyspark get count in aggregate table

我有一个 table 看起来像这样:

+-------------+-----+
| PULocationID| fare|
+-------------+-----+
|            1|    5|
|            1|   15|
|            2|    2|
+-------------+-----+

我想要一个看起来像这样的 table:

+-------------+----------+------+
| PULocationID| avg_fare | count|
+-------------+----------+------+
|            1|        10|     2|
|            2|         2|     1|
+-------------+----------+------+

这是我正在尝试的:

result_table = trips.groupBy("PULocationID") \
        .agg(
            {"total_amount": "avg"},
            {"PULocationID": "count"}
    )

如果我取出计数线,获取 avg 列就可以正常工作。但是我还需要计算该特定 PULocationID

有多少行

注意:我无法添加除 pyspark.sql.functions import col

以外的任何其他导入

感谢您的帮助!

我太接近了,我只是将它格式化为两个词典而不是一个。

result_table = trips.groupBy("PULocationID") \
        .agg(
            {"total_amount": "avg","PULocationID":"count"}
    )

这应该是适合您的解决方案 - 使用 avg()count()

df = spark.createDataFrame([(1,5),(1,15),(2,2)],[ "PULocationID","fare"])
df.show()
df_group = df.groupBy("PULocationID").agg(F.avg("fare").alias("avg_fare"), F.count("PULocationID").alias("count"))
df_group.show()

**Input**
+------------+----+
|PULocationID|fare|
+------------+----+
|           1|   5|
|           1|  15|
|           2|   2|
+------------+----+

Output
+------------+--------+-----+
|PULocationID|avg_fare|count|
+------------+--------+-----+
|           1|    10.0|    2|
|           2|     2.0|    1|
+------------+--------+-----+