0Pricing
Scala for Backend Engineering & Functional Programming · บทเรียน

RDD และ DataFrames

นามธรรมข้อมูลของ Spark

RDD และ DataFrames เป็นบทเรียน Scala for Backend Engineering & Functional Programming ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Scala for Backend Engineering & Functional Programming และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Scala for Backend Engineering & Functional Programming มีบทเรียนทั้งหมด 4 บทเรียน

Apache Spark คืออะไร

Apache Spark คือเครื่องมือแบบกระจายสำหรับประมวลผลข้อมูลขนาดใหญ่ โดยแบ่งข้อมูลไปตามคลัสเตอร์และเรียกใช้การคำนวณแบบขนาน Scala เป็นภาษาหลักของ Spark จึงมี API ที่กระชับและคำนึงถึงชนิดข้อมูล

RDD

ชุดข้อมูลแบบกระจายที่ทนทานต่อความล้มเหลว (RDD) คือสิ่งนามธรรมระดับล่างของ Spark เป็นคอลเลกชันที่เปลี่ยนแปลงไม่ได้และแบ่งเป็นพาร์ทิชัน ซึ่งประมวลผลแบบขนานและสร้างขึ้นใหม่จากสายสืบทอดได้หากโหนดล้มเหลว

SparkContext และ SparkSession

คุณเข้าสู่ Spark ผ่าน SparkSession โดย sparkContext ของเซสชันจะสร้าง RDD ส่วนตัวเซสชันจะสร้าง DataFrame และเรียกใช้ SQL

import org.apache.spark.sql.SparkSession

val spark = SparkSession.builder()
  .appName("Demo")
  .master("local[*]")
  .getOrCreate()

การสร้าง RDD

สร้าง RDD ได้โดยทำคอลเลกชันภายในให้ทำงานแบบขนาน หรืออ่านจากไฟล์ แต่ละพาร์ทิชันจะถูกประมวลผลโดยงานแยกกัน

val sc = spark.sparkContext
val numbers = sc.parallelize(Seq(1, 2, 3, 4, 5))
val lines   = sc.textFile("data.txt")

DataFrame

DataFrame คือตารางแบบกระจายที่มีคอลัมน์พร้อมชื่อและชนิดข้อมูล เปรียบได้กับ RDD ของแถวที่มีสคีมาเพิ่มเติม ตัวเพิ่มประสิทธิภาพ Catalyst สามารถวางแผนและเพิ่มประสิทธิภาพคำค้นหา DataFrame ได้

การสร้าง DataFrame

สร้าง DataFrame จากคอลเลกชัน (ด้วย toDF) หรืออ่านจากไฟล์ที่มีโครงสร้าง เช่น CSV, JSON หรือ Parquet

import spark.implicits._

val df = Seq(("Alice", 30), ("Bob", 25)).toDF("name", "age")
val csv = spark.read.option("header", "true").csv("people.csv")

การตรวจสอบ DataFrame

ใช้ show เพื่อพิมพ์แถว ใช้ printSchema เพื่อดูชนิดของคอลัมน์ และใช้ count เพื่อดูจำนวนแถว

df.printSchema()
df.show()
println(df.count())

Dataset และความปลอดภัยของชนิดข้อมูล

Dataset คือ DataFrame ที่มีชนิดข้อมูล: Dataset[T] โดย T เป็นคลาสกรณี ซึ่งผสานการเพิ่มประสิทธิภาพของ DataFrame เข้ากับการตรวจสอบชนิดข้อมูลตั้งแต่เวลาคอมไพล์

import spark.implicits._

case class Person(name: String, age: Int)
val ds = Seq(Person("Alice", 30)).toDS()

RDD กับ DataFrame กับ Dataset

เลือกใช้ตามความต้องการ:

  • RDD — ควบคุมได้เต็มที่ ไม่มีสคีมา และไม่มีตัวเพิ่มประสิทธิภาพ
  • DataFrame — มีสคีมาและการเพิ่มประสิทธิภาพด้วย Catalyst แต่แถวไม่มีชนิดข้อมูล
  • Dataset — มีสคีมา การเพิ่มประสิทธิภาพ และความปลอดภัยของชนิดข้อมูล

การแปลงระหว่างสิ่งเหล่านี้

แปลง DataFrame เป็น RDD ด้วย .rdd หรือแปลง RDD ของคลาสกรณีเป็น DataFrame ด้วย .toDF ส่วน Dataset ก็แปลงเป็น DataFrame ด้วย .toDF ได้เช่นกัน

val rdd = df.rdd          // DataFrame -> RDD[Row]
val back = ds.toDF()      // Dataset -> DataFrame

คอลเลกชัน Scala แบบธรรมดา

ในเชิงแนวคิด DataFrame ทำงานคล้ายคอลเลกชัน Scala แต่กระจายการทำงานไปหลายส่วน ตัวอย่างต่อไปนี้คือสิ่งเทียบเท่าที่ทำงานภายในเครื่องและมีทุกอย่างอยู่ในตัว เพื่อช่วยให้เห็นภาพ

object Main {
  case class Person(name: String, age: Int)
  def main(args: Array[String]): Unit = {
    val people = Seq(Person("Alice", 30), Person("Bob", 25))
    people.foreach(p => println(s"${p.name}: ${p.age}"))
  }
}

ตรวจสอบอย่างรวดเร็ว

สิ่งนามธรรมใดมีสคีมา การเพิ่มประสิทธิภาพด้วย Catalyst และความปลอดภัยของชนิดข้อมูลตั้งแต่เวลาคอมไพล์

สรุปทบทวน

คุณได้รู้จักสิ่งนามธรรมด้านข้อมูลของ Spark:

  • SparkSession เป็นจุดเริ่มต้น
  • RDD — คอลเลกชันแบบกระจายระดับล่าง
  • DataFrame — ตารางแบบกระจายที่มีสคีมา
  • Dataset — DataFrame ที่มีชนิดข้อมูล

ถัดไป: การแปลงและการดำเนินการ

คำถามที่พบบ่อย

บทเรียน “RDD และ DataFrames” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “RDD และ DataFrames” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Scala for Backend Engineering & Functional Programming ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Scala for Backend Engineering & Functional Programming มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “RDD และ DataFrames”

นามธรรมข้อมูลของ Spark คุณปฏิบัติ Scala for Backend Engineering & Functional Programming ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Scala for Backend Engineering & Functional Programming หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Scala for Backend Engineering & Functional Programming บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน

บทเรียน “RDD และ DataFrames” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Scala for Backend Engineering & Functional Programming นี้ได้ไหม

ได้ บทเรียน Scala for Backend Engineering & Functional Programming ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. RDD และ DataFrames
  2. การแปลงและการดำเนินการ
  3. Spark SQL
  4. การรวมกลุ่ม
← กลับไปที่ Scala for Backend Engineering & Functional Programming