RDD と DataFrame
Spark のデータ抽象です。
「RDD と DataFrame」はCoddyKit上の無料Scala for Backend Engineering & Functional Programmingレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはScala for Backend Engineering & Functional Programming学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Scala for Backend Engineering & Functional Programmingコースには全4レッスンが含まれています。
Apache Sparkとは
Apache Sparkは、大規模データ処理のための分散処理エンジンです。データをクラスター全体に分割し、計算を並列実行します。ScalaはSparkのネイティブ言語であり、簡潔で型を意識したAPIを提供します。
RDD
Resilient Distributed Dataset(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の作成
コレクションからtoDFを使ってDataFrameを作成するか、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です。Tがcase classであるDataset[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 — スキーマ、最適化、型安全性
相互変換
.rddでDataFrameをRDDに変換できます。また、case classのRDDは.toDFでDataFrameに変換できます。Datasetも.toDFでDataFrameに変換できます。
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 と DataFrame」レッスンは無料ですか?
はい。「RDD と DataFrame」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Scala for Backend Engineering & Functional Programmingコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Scala for Backend Engineering & Functional Programmingコースには全4レッスンが含まれています。
「RDD と DataFrame」で何を学びますか?
Spark のデータ抽象です。 ブラウザで直接実行するハンズオンコードでScala for Backend Engineering & Functional Programmingを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Scala for Backend Engineering & Functional Programmingを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのScala for Backend Engineering & Functional Programmingは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「RDD と DataFrame」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このScala for Backend Engineering & Functional Programmingレッスンでコードを書いて実行できますか?
はい。すべてのScala for Backend Engineering & Functional Programmingレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。