Agregasi
Kelompokkan dan agregasikan.
Agregasi adalah pelajaran Scala for Backend Engineering & Functional Programming gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Scala for Backend Engineering & Functional Programming, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Scala for Backend Engineering & Functional Programming mencakup 4 pelajaran total.
Mengapa Melakukan Agregasi?
Agregasi merangkum banyak baris menjadi lebih sedikit baris: total, rata-rata, dan jumlah per grup. Di Spark, agregasi merupakan operasi lebar yang mungkin mengocok data di seluruh klaster.
Agregasi Global
Hitung satu ringkasan atas seluruh DataFrame dengan agg dan fungsi seperti count, sum, avg, min, max.
import org.apache.spark.sql.functions._
df.agg(
count("*").as("rows"),
avg("age").as("avg_age")
).show()groupBy
groupBy mempartisi baris berdasarkan satu kolom atau lebih, lalu menghasilkan RelationalGroupedDataset yang siap diagregasikan.
import org.apache.spark.sql.functions._
val byCity = df.groupBy("city").agg(count("*").as("people"))
byCity.show()Beberapa Agregasi
Berikan beberapa ekspresi agregat kepada agg untuk menghitung banyak ringkasan per grup dalam satu lintasan.
import org.apache.spark.sql.functions._
df.groupBy("department").agg(
sum("salary").as("total"),
avg("salary").as("avg"),
max("salary").as("top")
).show()Menghitung Nilai Unik
Gunakan countDistinct untuk menghitung nilai unik, dan approx_count_distinct untuk penghitungan perkiraan yang lebih cepat pada kumpulan data berukuran sangat besar.
import org.apache.spark.sql.functions._
df.agg(countDistinct("city").as("unique_cities")).show()Memfilter Grup dengan having
Dalam SQL, HAVING memfilter grup yang telah diagregasikan. Dalam DSL, terapkan filter setelah agg pada kolom yang telah dihitung.
import org.apache.spark.sql.functions._
df.groupBy("city")
.agg(count("*").as("n"))
.filter(col("n") > 100)
.show()Melakukan Agregasi dalam SQL
Logika yang sama seperti kueri SQL terhadap tampilan yang telah didaftarkan, menggunakan GROUP BY dan HAVING.
df.createOrReplaceTempView("people")
spark.sql(
"SELECT city, COUNT(*) AS n FROM people GROUP BY city HAVING COUNT(*) > 100"
).show()Tabel Pivot
pivot mengubah nilai unik suatu kolom menjadi kolom terpisah — berguna untuk tabulasi silang seperti penjualan per wilayah per kuartal.
import org.apache.spark.sql.functions._
sales.groupBy("region")
.pivot("quarter")
.agg(sum("amount"))
.show()Fungsi Jendela
Fungsi jendela melakukan agregasi pada bingkai bergeser tanpa menggabungkan baris — sempurna untuk total berjalan atau pemeringkatan.
import org.apache.spark.sql.expressions.Window
import org.apache.spark.sql.functions._
val w = Window.partitionBy("dept").orderBy(col("salary").desc)
df.withColumn("rank", rank().over(w)).show()Agregasi RDD
Pada tingkat RDD, aggregateByKey dan reduceByKey menggabungkan nilai per kunci dengan logika khusus dan penggabungan awal secara lokal demi efisiensi.
val pairs = sc.parallelize(Seq(("a", 10), ("a", 20), ("b", 5)))
val sums = pairs.reduceByKey(_ + _)
// (a, 30), (b, 5)groupBy Scala Sederhana
Analogi mandiri: groupBy koleksi Scala ditambah mapValues menyerupai pengelompokan dan agregasi Spark.
object Main {
def main(args: Array[String]): Unit = {
val data = Seq(("a", 10), ("a", 20), ("b", 5))
val sums = data.groupBy(_._1).map { case (k, v) => k -> v.map(_._2).sum }
sums.toSeq.sortBy(_._1).foreach { case (k, s) => println(s"$k: $s") }
}
}Pemeriksaan Singkat
Fitur apa yang melakukan agregasi pada bingkai baris tanpa menggabungkannya menjadi satu baris per grup?
Rangkuman
Anda telah mengagregasikan data di Spark:
aggdengancount,sum,avg,min,maxgroupBy, beberapa agregasi, filterhavingpivotdan fungsi jendelareduceByKey/aggregateByKeypada RDD
Anda telah menyelesaikan kursus Apache Spark.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Agregasi” gratis?
Ya — teks lengkap “Agregasi” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Scala for Backend Engineering & Functional Programming, upgrade ke CoddyKit PRO. Kursus Scala for Backend Engineering & Functional Programming mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Agregasi”?
Kelompokkan dan agregasikan. Kamu berlatih Scala for Backend Engineering & Functional Programming dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Scala for Backend Engineering & Functional Programming?
Tidak diperlukan pengalaman sebelumnya. Scala for Backend Engineering & Functional Programming di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.
Berapa lama pelajaran “Agregasi” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Scala for Backend Engineering & Functional Programming ini?
Ya. Setiap pelajaran Scala for Backend Engineering & Functional Programming menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.