Pyspark partitionBy,groupBy,用于数据过滤

时间:2019-12-23 10:55:21

标签: python pyspark

假设您有一个(大)数据集,其中一部分可能看起来像这样(在实际数据集中有更多列)。

+---+-----+---------+----------+-----------+----------------+
|   |  i  |    B    |    C     |     D     |       E        |
+---+-----+---------+----------+-----------+----------------+
|   | .   | House A | Garden X | Terrace C | 90             |
|   | .   | House A | Garden X | Terrace C | 80             |
|   | .   | House A | Garden X | Terrace D | 60             |
|   | .   | House B | Garden X | Terrace E | 75             |
|   | .   | House C | Garden Z | Terrace C | 85             |
+---+-----+---------+----------+-----------+----------------+

我想使用pyspark按B,C和D过滤数据,以便可以计算E上的统计信息。

例如,在“房屋A”下分组将最终产生以下两个分区:

+---+-----+---------+----------+-----------+----------------+
|   |  i  |    B    |    C     |     D     |       E        |
+---+-----+---------+----------+-----------+----------------+
|   | .   | House A | Garden X | Terrace C | 90             |
|   | .   | House A | Garden X | Terrace C | 80             |

|   | .   | House A | Garden X | Terrace D | 60             |

有效地,我想过滤具有独特特征的数据子集。

我对如何使用PySpark进行管理感到非常困惑。我使用了groupBy和partitionBy函数,但是我无法绕过第一个“过滤”操作,例如-为“房屋A”生成一个子表。我被告知要研究PySpark的“窗口”功能,但是我发现它主要应用于在给定表的连续行内进行计算的问题。

注意:我不想存储过滤后的数据表。 我只想计算一个汇总统计量,它可以是E值的平均值。

任何帮助表示赞赏。

SC

1 个答案:

答案 0 :(得分:0)

显然,您只想执行group by操作。

from pyspark.sql import functions as F

df.groupBy("B", "C", "D").agg(F.avg("E"))