# Aggregations और Null सँभालना — Apache Spark: DataFrames से Big Data Processing

Source: https://www.geekswithgeeks.com/hi/spark/df-aggregation

> डेटा को समूहित और संक्षिप्त करें और ग़ायब मानों को सोच-समझकर सँभालें।

## groupBy फिर agg

`groupBy("city")` के बाद `agg(...)` प्रति समूह सार `count`, `sum`, `avg`, `min`, `max` और `countDistinct` जैसे functions से निकालता है। बड़े dataset पर aggregations **shuffle** शुरू करते हैं, क्योंकि समूह की सारी rows को एक मशीन पर मिलना होता है। **Nulls** पर सावधानी चाहिए: `sum` और `avg` जैसे aggregate functions **nulls अनदेखे** करते हैं, पर जिस समूह का हर मान null हो वह `NULL` लौटाता है। स्पष्ट रूप से तय करें कि nulls भरने हैं (`na.fill`), rows हटानी हैं (`na.drop`) या रखनी हैं, और याद रखें कि null से तुलना न सही है न ग़लत, इसलिए `isNull()` और `isNotNull()` उपयोग करें।

## प्रति शहर सार, चलाकर

मैंने यह Apache Spark 4.0.0 (PySpark, local mode, official Docker image में) पर चलाया। मुंबई के अकेले order का amount null है, इसलिए उसका योग और औसत `NULL` हैं, जबकि दिल्ली के तीन orders 430.0 और 143.3 देते हैं।

```python
orders.groupBy("city").agg(F.count("*").alias("orders"), F.sum("amount").alias("revenue"), F.round(F.avg("amount"), 1).alias("avg")).orderBy("city").show()
```

Output:

```
+------+------+-------+-----+
|  city|orders|revenue|  avg|
+------+------+-------+-----+
| delhi|     3|  430.0|143.3|
|mumbai|     1|   NULL| NULL|
|  pune|     2|  320.0|160.0|
+------+------+-------+-----+
```

## Nulls गिनना और भरना, चलाकर

मैंने यह Apache Spark 4.0.0 (PySpark, local mode, official Docker image में) पर चलाया। एक order का amount null है। Nulls को 0.0 से भरने के बाद कुल revenue 750.0 है।

```python
print(orders.filter(F.col("amount").isNull()).count(), orders.na.fill({"amount": 0.0}).agg(F.sum("amount")).first()[0])
```

Output:

```
1 750.0
```

**Quiz:** Group में null मानों के साथ `sum` क्या करता है?

- [ ] नतीजा दोगुना करता है
- [ ] उन्हें 1 मानता है
- [ ] हमेशा विफल होता है
- [x] उन्हें अनदेखा करता है (और सभी मान null हों तभी NULL लौटाता है)

*Answer:* उन्हें अनदेखा करता है (और सभी मान null हों तभी NULL लौटाता है). Aggregate functions nulls छोड़ देते हैं, जो ग़ायब डेटा छिपा सकता है, इसलिए null गिनती जाँचें।
