假设您有一个(大)数据集,其中一部分可能看起来像这样(在实际数据集中有更多列)。
+---+-----+---------+----------+-----------+----------------+
| | 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
答案 0 :(得分:0)
显然,您只想执行group by
操作。
from pyspark.sql import functions as F
df.groupBy("B", "C", "D").agg(F.avg("E"))