This repository contains all exercise files from the COMP.CS.320 Data-Intensive Programming course. All exercises were implemented using Python and executed on Azure Databricks platform.
This course focused on processing large-scale data using distributed computing frameworks, primarily Apache Spark. The exercises covered fundamental concepts of data-intensive programming, including data manipulation, analysis, streaming, machine learning, and various data storage formats.
- Platform: Azure Databricks
- Language: Python
- Framework: Apache Spark (PySpark)
- Storage: Azure Data Lake Storage Gen2 (ADLS Gen2)
- File Formats: CSV, Parquet, Delta Lake
- ML Library: Spark MLlib
The course covered data-intensive programming with Apache Spark on Databricks: DataFrame operations and aggregations, RDDs and text processing, time series data, Spark ML (linear regression, classification), structured streaming, and storage formats (CSV, Parquet, Delta Lake). The group assignment applied these in a larger project (sales and football analytics, optimization, ML, and image analysis).
- Efficient data loading from various sources (CSV, Parquet, Delta)
- Data transformation and cleaning
- Complex aggregations and window functions
- Handling missing values and NULL data
- Understanding Spark's distributed architecture
- Optimizing Spark operations (broadcasting, caching, partitioning)
- Avoiding unnecessary shuffles and expensive operations
- Performance tuning techniques
- Understanding different file formats and their use cases
- Schema management and evolution
- Delta Lake for ACID transactions on big data
- Efficient data storage strategies
- Real-time data processing with Structured Streaming
- Handling streaming aggregations
- Managing streaming queries and output modes
- Building ML pipelines with Spark ML
- Feature engineering and vector assembly
- Model training and evaluation
- Custom evaluation metrics
- Time series analysis
- Text processing at scale
- Complex business logic implementation
- Multi-dataset joins and transformations
- Schema Management: Using explicit schemas instead of inference for better performance
- Column Pruning: Selecting only necessary columns early in the pipeline
- Early Filtering: Filtering data as early as possible to reduce processing
- Broadcasting: Using
broadcast()for small datasets in joins - Avoiding Collect: Using
first()instead ofcollect()[0]when only one value is needed - Efficient Aggregations: Combining multiple operations in single
agg()calls - Window Functions: Using window functions for ranking and aggregations
- Caching Strategy: Strategic use of caching for repeatedly used DataFrames
Course: COMP.CS.320 Data-Intensive Programming
Platform: Azure Databricks
Language: Python (PySpark)
Year: 2024-2025