Spark SQL
データをクエリします。
「Spark SQL」はCoddyKit上の無料Scala for Backend Engineering & Functional Programmingレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはScala for Backend Engineering & Functional Programming学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Scala for Backend Engineering & Functional Programmingコースには全4レッスンが含まれています。
Spark SQL とは
Spark SQLを使用すると、標準 SQL または型付き DataFrame API で分散データをクエリできます。どちらも同じ Catalyst オプティマイザーを通るため、パフォーマンスは同じです。
一時ビュー
DataFrame に対して SQL を実行するには、ビューとして登録します。createOrReplaceTempView によって、現在のセッション中に名前でクエリできるようになります。
val df = Seq(("Alice", 30), ("Bob", 25)).toDF("name", "age")
df.createOrReplaceTempView("people")SQL クエリの実行
SQL 文字列を指定して spark.sql を使用します。戻り値は新しい DataFrame で、さらに変換したり表示したりできます。
val adults = spark.sql("SELECT name FROM people WHERE age >= 18")
adults.show()DataFrame DSL
同じクエリを型付き DSL で記述した例です。functions オブジェクトには、col、比較演算、および多数の組み込み式が用意されています。
import org.apache.spark.sql.functions._
val adults = df.filter(col("age") >= 18).select("name")選択と別名の設定
select で列を射影し、as / alias で名前を変更します。計算列には、col を使った式を使用します。
import org.apache.spark.sql.functions._
df.select(
col("name"),
(col("age") + 1).as("age_next_year")
).show()行のフィルタリング
where と filter は同義です。&& と || で条件を組み合わせ、不足しているデータには isNull / isNotNull を使用します。
import org.apache.spark.sql.functions._
df.where(col("age") > 20 && col("name").isNotNull).show()並べ替えと件数制限
orderBy で並べ替えます(降順には desc を使用します)。limit では返す行数に上限を設定します。
import org.apache.spark.sql.functions._
df.orderBy(col("age").desc).limit(5).show()結合
join を使い、キーで 2 つの DataFrame を結合します。"inner"、"left"、"outer" など、結合の種類を指定します。
val joined = orders.join(customers, Seq("customer_id"), "inner")
joined.show()組み込み関数
functions パッケージには、upper、concat、when、round、日付関数など、数百のヘルパーが用意されています。
import org.apache.spark.sql.functions._
df.withColumn("name_upper", upper(col("name")))
.withColumn("category", when(col("age") >= 30, "senior").otherwise("junior"))
.show()テーブルの読み書き
Spark SQL は多くの形式の読み書きに対応しています。Parquet は列指向で効率的です。saveAsTable を使うとメタストアに永続化できます。
val data = spark.read.parquet("input.parquet")
data.write.mode("overwrite").parquet("output.parquet")単純な Scala による SQL 風クエリ
自己完結型の類似例です。インメモリコレクションをコレクションメソッドでクエリすることで、Spark SQL の SELECT/WHERE を再現します。
object Main {
case class Person(name: String, age: Int)
def main(args: Array[String]): Unit = {
val people = Seq(Person("Alice", 30), Person("Bob", 25))
val adults = people.filter(_.age >= 18).map(_.name)
println(adults.mkString(", "))
}
}理解度チェック
spark.sql("SELECT ...") でクエリする前に、DataFrame に対して何を行う必要がありますか?
まとめ
Spark SQL でデータをクエリする方法を学びました:
createOrReplaceTempViewでビューを登録するspark.sqlまたは DataFrame DSL で SQL を実行するselect、where、orderBy、join- 組み込み関数と Parquet の入出力
次は集約です。
よくある質問
「Spark SQL」レッスンは無料ですか?
はい。「Spark SQL」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Scala for Backend Engineering & Functional Programmingコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Scala for Backend Engineering & Functional Programmingコースには全4レッスンが含まれています。
「Spark SQL」で何を学びますか?
データをクエリします。 ブラウザで直接実行するハンズオンコードでScala for Backend Engineering & Functional Programmingを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Scala for Backend Engineering & Functional Programmingを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのScala for Backend Engineering & Functional Programmingは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「Spark SQL」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このScala for Backend Engineering & Functional Programmingレッスンでコードを書いて実行できますか?
はい。すべてのScala for Backend Engineering & Functional Programmingレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- RDD と DataFrame
- 変換とアクション
- Spark SQL
- 集約