Skip to content

Instantly share code, notes, and snippets.

@akhiyarwaladi
Created May 22, 2025 03:17
Show Gist options
  • Save akhiyarwaladi/ad8966ef635c7200df442750f8ad9004 to your computer and use it in GitHub Desktop.
Save akhiyarwaladi/ad8966ef635c7200df442750f8ad9004 to your computer and use it in GitHub Desktop.
Latihan Apache Spark

πŸš— Latihan Soal PySpark - Cars Dataset

Gunakan dataset cars.csv yang telah digunakan dalam tutorial untuk menyelesaikan latihan-latihan berikut ini.

πŸ“ Setup Environment

# Jalankan kode ini terlebih dahulu
!pip install pyspark findspark
import findspark
findspark.init()
from pyspark.sql import SparkSession
from pyspark.sql.functions import *
from pyspark.sql.types import *

spark = SparkSession.builder.master("local[*]").getOrCreate()
spark.conf.set("spark.sql.repl.eagerEval.enabled", True)

# Load dataset
df = spark.read.csv('cars.csv', header=True, sep=";", inferSchema=True)

🟒 LEVEL 1: BASIC OPERATIONS

Soal 1: Data Exploration

a) Tampilkan 10 baris pertama dari dataset
b) Tampilkan schema dari dataframe
c) Hitung total jumlah record dalam dataset
d) Tampilkan nama-nama kolom yang ada

Soal 2: Basic Selection & Filtering

a) Pilih hanya kolom Car, MPG, dan Origin
b) Tampilkan semua mobil yang berasal dari Japan
c) Tampilkan mobil dengan MPG lebih dari 30
d) Tampilkan mobil dengan Cylinders = 4 dan Origin = 'Europe'

Soal 3: Basic Aggregations

a) Hitung rata-rata MPG dari semua mobil
b) Temukan nilai Weight minimum dan maksimum
c) Hitung jumlah mobil berdasarkan Origin
d) Temukan mobil dengan Horsepower tertinggi


🟑 LEVEL 2: INTERMEDIATE OPERATIONS

Soal 4: String Functions

a) Buat kolom baru Car_Upper yang berisi nama mobil dalam huruf kapital
b) Buat kolom Car_Length yang berisi panjang karakter nama mobil
c) Ambil 10 karakter pertama dari nama mobil dan buat kolom Car_Short
d) Gabungkan kolom Car dan Model dengan pemisah " - " menjadi kolom Car_Model

Soal 5: Data Transformation & New Columns

a) Buat kolom Efficiency_Category dengan kriteria:

  • MPG > 30: "High"
  • MPG 20-30: "Medium"
  • MPG < 20: "Low" b) Konversi Weight dari pound ke kilogram (1 pound = 0.453592 kg)
    c) Buat kolom Power_to_Weight (Horsepower/Weight ratio)
    d) Kategorikan Cylinders menjadi "Small" (≀4), "Medium" (5-6), "Large" (β‰₯7)

Soal 6: Grouping & Advanced Aggregations

a) Hitung rata-rata MPG, Horsepower, dan Weight berdasarkan Origin
b) Temukan mobil dengan MPG tertinggi di setiap kategori Origin
c) Hitung jumlah mobil dan rata-rata MPG berdasarkan Cylinders
d) Tampilkan 5 model tahun dengan jumlah mobil terbanyak


πŸ”΄ LEVEL 3: ADVANCED OPERATIONS

Soal 7: Complex Filtering & Sorting

a) Tampilkan mobil Eropa dengan MPG > 25 dan Cylinders = 4, urutkan berdasarkan MPG descending
b) Temukan 10 mobil paling efisien (MPG tertinggi) dari masing-masing Origin
c) Tampilkan mobil dengan Weight di atas rata-rata tapi MPG di atas median
d) Cari mobil yang memiliki Acceleration tercepat di setiap kategori Cylinders

Soal 8: Date & Numeric Operations

a) Konversi kolom Model menjadi tahun lengkap (70 β†’ 1970, 80 β†’ 1980)
b) Buat kolom Age yang menghitung umur mobil dari tahun 2024
c) Hitung persentase setiap Origin dari total dataset
d) Buat kategori dekade dan hitung rata-rata MPG per dekade

Soal 9: Joins (Buat Dataframe Tambahan)

# Buat dataframe harga mobil
price_data = [
    ("US", 15000, "USD"),
    ("Europe", 18000, "EUR"), 
    ("Japan", 16000, "USD")
]
price_df = spark.createDataFrame(price_data, ["Origin", "Base_Price", "Currency"])

a) Join dataframe cars dengan price_data berdasarkan Origin
b) Hitung estimasi harga setiap mobil berdasarkan Origin
c) Tampilkan mobil dengan harga estimasi tertinggi
d) Buat left join dan tampilkan mobil yang tidak memiliki data harga


🟣 LEVEL 4: SPARK SQL & RDD

Soal 10: Spark SQL Practice

Tulis query SQL untuk: a) Menampilkan rata-rata MPG per Origin menggunakan Spark SQL
b) Menemukan mobil dengan rasio Horsepower/Weight tertinggi
c) Membuat ranking mobil berdasarkan efisiensi dalam setiap Origin
d) Menghitung moving average MPG untuk setiap 5 model tahun berurutan

Soal 11: RDD Operations

a) Convert DataFrame ke RDD dan hitung jumlah mobil menggunakan RDD
b) Gunakan RDD untuk menghitung rata-rata MPG mobil dari Japan
c) Dengan RDD, temukan mobil dengan nama terpanjang
d) Implementasikan word count pada kolom Car menggunakan RDD

Soal 12: Mixed Operations Challenge

a) Buat function UDF untuk mengkategorikan mobil berdasarkan multiple criteria:

  • Sport: MPG < 20 AND Horsepower > 150
  • Economy: MPG > 30 AND Cylinders ≀ 4
  • Luxury: Weight > 3500 AND Origin = 'Europe'
  • Standard: sisanya b) Hitung distribusi kategori mobil tersebut
    c) Temukan korelasi antara MPG dan Weight menggunakan built-in functions
    d) Buat analisis trend MPG dari tahun ke tahun

πŸ† BONUS CHALLENGE

Soal 13: Data Quality & Complex Analysis

a) Identifikasi dan handle missing values (MPG = 0)
b) Deteksi outliers dalam data Weight menggunakan IQR method
c) Buat analisis komparasi performa mobil antar Origin dengan multiple metrics
d) Implementasikan window functions untuk ranking dalam grup

Soal 14: Performance Optimization

a) Bandingkan performa antara DataFrame API vs Spark SQL untuk query complex
b) Implementasikan caching untuk dataframe yang sering digunakan
c) Optimize join operation untuk dataset besar
d) Gunakan repartitioning untuk meningkatkan performance


πŸ’‘ TIPS PENGERJAAN:

  1. Gunakan .show() dengan parameter yang tepat untuk melihat hasil
  2. Kombinasikan multiple operations dengan chaining (method chaining)
  3. Gunakan alias untuk kolom hasil yang mudah dibaca
  4. Perhatikan data types saat melakukan operasi matematika
  5. Test dengan data kecil sebelum apply ke seluruh dataset
  6. Dokumentasikan code dengan comment yang jelas

🎯 KRITERIA EVALUASI:

  • Correctness: Apakah hasil sesuai dengan yang diminta?
  • Efficiency: Apakah menggunakan PySpark functions yang optimal?
  • Code Quality: Apakah code readable dan well-structured?
  • Understanding: Apakah menunjukkan pemahaman konsep PySpark?

Selamat mengerjakan! πŸš€

Ingat: Jika menemui error, baca error message dengan teliti dan coba debug step by step.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment