2024/4/12に翔泳社よりApache Spark徹底入門を出版します!
書籍のサンプルノートブックをウォークスルーしていきます。Python/Chapter04/4-3 Spark Tables
となります。
翻訳ノートブックのリポジトリはこちら。
ノートブックはこちら
このノートブックでは、データベース、テーブル、カラムをクエリーするためのSpark Catalog Interface APIの使い方を説明します。
文書化されているメソッドの完全なリストはこちらです。
us_flights_file = "/databricks-datasets/learning-spark-v2/flights/departuredelays.csv"
マネージドテーブルの作成
# カタログ、データベース、マネージドテーブルの作成
spark.sql("USE CATALOG takaakiyayoi_catalog")
spark.sql("DROP DATABASE IF EXISTS learn_spark_db CASCADE")
spark.sql("CREATE DATABASE learn_spark_db")
spark.sql("USE learn_spark_db")
spark.sql("CREATE TABLE us_delay_flights_tbl(date STRING, delay INT, distance INT, origin STRING, destination STRING)")
データベースの表示
display(spark.catalog.listDatabases())
US Flightsテーブルの読み込み
df = (spark.read.format("csv")
.schema("date STRING, delay INT, distance INT, origin STRING, destination STRING")
.option("header", "true")
.option("path", "/databricks-datasets/learning-spark-v2/flights/departuredelays.csv")
.load())
テーブルに保存
df.write.mode("overwrite").saveAsTable("us_delay_flights_tbl")
テーブルのキャッシュ
%sql
CACHE TABLE us_delay_flights_tbl
テーブルがキャッシュされているかどうかを確認します。
spark.catalog.isCached("us_delay_flights_tbl")
True
データベースのテーブルの表示
テーブルはSparkによって管理されているMANAGED
であることに注意してください。
spark.catalog.listTables(dbName="learn_spark_db")
[Table(name='us_delay_flights_tbl', catalog='takaakiyayoi_catalog', namespace=['learn_spark_db'], description=None, tableType='MANAGED', isTemporary=False)]
テーブルのカラムの表示
spark.catalog.listColumns("us_delay_flights_tbl")
[Column(name='date', description=None, dataType='string', nullable=True, isPartition=False, isBucket=False, isCluster=False),
Column(name='delay', description=None, dataType='int', nullable=True, isPartition=False, isBucket=False, isCluster=False),
Column(name='distance', description=None, dataType='int', nullable=True, isPartition=False, isBucket=False, isCluster=False),
Column(name='origin', description=None, dataType='string', nullable=True, isPartition=False, isBucket=False, isCluster=False),
Column(name='destination', description=None, dataType='string', nullable=True, isPartition=False, isBucket=False, isCluster=False)]
アンマネージドテーブルの作成
割愛します。