التجميعات
التجميع وإجراء العمليات التجميعية
التجميعات درس مجاني في Scala for Backend Engineering & Functional Programming على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Scala for Backend Engineering & Functional Programming، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Scala for Backend Engineering & Functional Programming 4 دروس في المجموع.
لماذا نستخدم التجميع؟
تلخّص التجميعات صفوفًا كثيرة في عدد أقل منها: مثل الإجماليات والمتوسطات والأعداد لكل مجموعة. وفي Spark، تُعد عمليات واسعة قد تعيد توزيع البيانات عبر العنقود.
التجميعات العامة
احسب ملخصًا واحدًا لـ DataFrame بأكملها باستخدام agg ودوال مثل count وsum وavg وmin وmax.
import org.apache.spark.sql.functions._
df.agg(
count("*").as("rows"),
avg("age").as("avg_age")
).show()groupBy
تقسّم groupBy الصفوف حسب عمود واحد أو عدة أعمدة، وتنتج RelationalGroupedDataset جاهزة للتجميع.
import org.apache.spark.sql.functions._
val byCity = df.groupBy("city").agg(count("*").as("people"))
byCity.show()تجميعات متعددة
مرّر عدة تعبيرات تجميع إلى agg لحساب ملخصات متعددة لكل مجموعة في مرور واحد.
import org.apache.spark.sql.functions._
df.groupBy("department").agg(
sum("salary").as("total"),
avg("salary").as("avg"),
max("salary").as("top")
).show()عدّ القيم المميزة
استخدم countDistinct لعدّ القيم الفريدة، واستخدم approx_count_distinct للحصول على عدّ تقريبي أسرع في مجموعات البيانات الضخمة.
import org.apache.spark.sql.functions._
df.agg(countDistinct("city").as("unique_cities")).show()تصفية المجموعات باستخدام having
في SQL، تعمل HAVING على تصفية المجموعات المجمّعة. أما في DSL، فطبّق filter بعد agg على العمود المحسوب.
import org.apache.spark.sql.functions._
df.groupBy("city")
.agg(count("*").as("n"))
.filter(col("n") > 100)
.show()التجميع في SQL
المنطق نفسه في استعلام SQL على عرض مسجّل، باستخدام GROUP BY وHAVING.
df.createOrReplaceTempView("people")
spark.sql(
"SELECT city, COUNT(*) AS n FROM people GROUP BY city HAVING COUNT(*) > 100"
).show()الجداول المحورية
تحوّل pivot القيم المميزة لعمود إلى أعمدة منفصلة — وهو أمر مفيد للجداول المتقاطعة، مثل المبيعات حسب المنطقة والربع.
import org.apache.spark.sql.functions._
sales.groupBy("region")
.pivot("quarter")
.agg(sum("amount"))
.show()دوال النوافذ
تجري دوال النوافذ التجميع على إطار متحرك من دون دمج الصفوف — وهي مثالية للإجماليات التراكمية أو التصنيفات.
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()تجميعات RDD
على مستوى RDD، تدمج aggregateByKey وreduceByKey القيم لكل مفتاح باستخدام منطق مخصص ودمج محلي مسبق لتحقيق الكفاءة.
val pairs = sc.parallelize(Seq(("a", 10), ("a", 20), ("b", 5)))
val sums = pairs.reduceByKey(_ + _)
// (a, 30), (b, 5)groupBy في Scala العادية
نظير مستقل: يحاكي استخدام groupBy مع mapValues في مجموعات Scala عملية التجميع حسب المجموعة في 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") }
}
}تحقق سريع
ما الميزة التي تجري التجميع على إطار من الصفوف من دون دمجها في صف واحد لكل مجموعة؟
مراجعة
لقد جمّعت البيانات في Spark:
aggمعcountوsumوavgوminوmaxgroupByوالتجميعات المتعددة ومرشحاتhavingpivotودوال النوافذreduceByKey/aggregateByKeyفي RDD
لقد أكملت دورة Apache Spark.
تعلم Scala مع معلم ذكاء اصطناعي — مجانًا
اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.
- الدورات
- 39
- الدروس
- 143
الأسئلة الشائعة
هل درس «التجميعات» مجاني؟
نعم — نص درس «التجميعات» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Scala for Backend Engineering & Functional Programming، انتقل إلى CoddyKit PRO. تتضمن دورة Scala for Backend Engineering & Functional Programming 4 دروس في المجموع.
ماذا ستتعلم في «التجميعات»؟
التجميع وإجراء العمليات التجميعية تتمرن على Scala for Backend Engineering & Functional Programming مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Scala for Backend Engineering & Functional Programming؟
لا تُشترط خبرة سابقة. Scala for Backend Engineering & Functional Programming على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.
كم من الوقت يستغرق درس «التجميعات»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Scala for Backend Engineering & Functional Programming هذا؟
نعم. كل درس في Scala for Backend Engineering & Functional Programming يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.