Sparkのテーブル

2024/4/12に翔泳社より**Apache Spark徹底入門**を出版します！

<a href="https://www.amazon.co.jp/dp/4798182281/"><img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/87910d7c-8a63-c198-8e82-216ea7a8ee07.jpeg" width=300></a>

書籍の[サンプルノートブック](https://github.com/databricks/LearningSparkV2/blob/master/notebooks/LearningSparkv2.dbc)をウォークスルーしていきます。`Python/Chapter04/4-3 Spark Tables`となります。

翻訳ノートブックのリポジトリはこちら。

https://github.com/taka-yayoi/SparkSample/tree/main

ノートブックはこちら

https://github.com/taka-yayoi/SparkSample/blob/main/Chapter04/4-3%20Spark%20Tables.py

このノートブックでは、データベース、テーブル、カラムをクエリーするためのSpark Catalog Interface APIの使い方を説明します。

文書化されているメソッドの完全なリストは[こちら](https://spark.apache.org/docs/latest/api/python/pyspark.sql.html#pyspark.sql.Catalog)です。

```py
us_flights_file = "/databricks-datasets/learning-spark-v2/flights/departuredelays.csv"
```

# マネージドテーブルの作成

```py
# カタログ、データベース、マネージドテーブルの作成
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)")
```

# データベースの表示

```py
display(spark.catalog.listDatabases())
```
![Screenshot 2024-03-27 at 15.52.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/fdb02e25-415f-d83d-7a10-c2da3178ca90.png)

# US Flightsテーブルの読み込み

```py
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())
```

# テーブルに保存

```py
df.write.mode("overwrite").saveAsTable("us_delay_flights_tbl")
```

# テーブルのキャッシュ

```sql
%sql
CACHE TABLE us_delay_flights_tbl
```

テーブルがキャッシュされているかどうかを確認します。

```py
spark.catalog.isCached("us_delay_flights_tbl")
```
```
True
```

# データベースのテーブルの表示

テーブルはSparkによって管理されている`MANAGED`であることに注意してください。

```py
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)]
```

# テーブルのカラムの表示

```py
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)]
```

# アンマネージドテーブルの作成

割愛します。

### はじめてのDatabricks

[はじめてのDatabricks](https://qiita.com/taka_yayoi/items/8dc72d083edb879a5e5d)

### Databricks無料トライアル

[Databricks無料トライアル](https://databricks.com/jp/try-databricks)