0Pricing
Scala for Backend Engineering & Functional Programming · レッスン

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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. RDD と DataFrame
  2. 変換とアクション
  3. Spark SQL
  4. 集約
← Scala for Backend Engineering & Functional Programmingに戻る