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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- RDD และ DataFrames
- การแปลงและการดำเนินการ
- Spark SQL
- การรวมกลุ่ม