# File Formats: CSV, JSON, Parquet — Apache Spark: DataFrames से Big Data Processing

Source: https://www.geekswithgeeks.com/hi/spark/sql-file-formats

> आम formats पढ़ें और लिखें, और analytics के लिए columnar formats चुनें।

## Row formats बनाम columnar

**CSV** और **JSON** पंक्ति-उन्मुख text formats हैं: बनाना और देखना आसान, पर बड़े और धीमे, और CSV में types नहीं होते। **Parquet** और **ORC** **columnar**, संपीड़ित binary formats हैं जो schema रखते हैं, Spark को सिर्फ़ ज़रूरी columns पढ़ने देते हैं (**column pruning**) और statistics से हिस्से छोड़ने देते हैं (**predicate pushdown**)। Analytics के लिए कच्चे CSV/JSON को जल्दी Parquet में बदलें। CSV या JSON पढ़ते समय `inferSchema` की जगह Spark को स्पष्ट **schema** दें, जो डेटा को एक बार अतिरिक्त स्कैन करता है और types ग़लत अनुमान लगा सकता है। Write modes: `overwrite`, `append`, `ignore`, `errorifexists` (डिफ़ॉल्ट)।

## स्पष्ट schema के साथ CSV पढ़ना (उदाहरण)

DDL string schema देने का सबसे छोटा तरीक़ा है। `PERMISSIVE` mode ख़राब rows को nulls के साथ रखता है; `FAILFAST` पहली ख़राब row पर रुक जाता है।

```python
schema = "order_id LONG, customer STRING, city STRING, amount DOUBLE, order_date DATE"
df = (spark.read.format("csv")
      .option("header", True)
      .option("mode", "FAILFAST")
      .schema(schema)
      .load("s3a://lake/raw/orders/2026-10-01/*.csv"))

df.write.mode("overwrite").parquet("s3a://lake/clean/orders/")
```

## एक विशाल CSV से बचें

एक विशाल gzip-संपीड़ित CSV को बाँटा नहीं जा सकता, इसलिए एक ही task उसे पूरा पढ़ता है। डेटा को कई मध्यम आकार की Parquet files (लगभग 128 MB से 1 GB प्रत्येक) के रूप में रखें।

**Quiz:** Analytics के लिए Parquet आम तौर पर CSV से बेहतर क्यों है?

- [x] यह columnar, संपीड़ित है और schema रखता है, इसलिए Spark कम डेटा पढ़ता है
- [ ] इसे text editor में खोला जा सकता है
- [ ] इसमें types नहीं होते
- [ ] इसे पढ़ना धीमा है

*Answer:* यह columnar, संपीड़ित है और schema रखता है, इसलिए Spark कम डेटा पढ़ता है. Columnar ढाँचा column pruning और predicate pushdown की अनुमति देता है।
