Databricksにおけるデータのインポート、読み込み、変更

> [Databricksクイックスタートガイド](https://qiita.com/taka_yayoi/items/125231c126a602693610)のコンテンツです。

[Introduction to importing, reading, and modifying data \| Databricks on AWS](https://docs.databricks.com/data/data.html) [2021/3/17時点]の翻訳です。

本記事では、UIを使ってどのようにデータをDatabricksにインポートするのか、Spark、ローカルAPIを用いてインポートしたデータをどのように読み込むのか、[Databricks File System (DBFS)](https://qiita.com/taka_yayoi/items/e16c7272a7feb5ec9a92)コマンドを用いてどのようにデータを変更するのかを説明します。

# データのインポート

手元のマシンにある小規模なデータをDatabricksで分析したい場合には、UIを用いてDBFSにデータをインポートすることができます。

> **注意**
この機能は管理者によって無効にされている場合があります。この機能を有効・無効にする方法に関しては、[Manage data upload(英語)](https://docs.databricks.com/administration-guide/workspace/dbfs-ui-upload.html)を参照ください。

UIを使ってDBFSにデータをアップロードする方法は2つあります：

- [Upload Data UI](https://qiita.com/taka_yayoi/items/e16c7272a7feb5ec9a92#ui%E3%81%8B%E3%82%89dbfs%E3%81%AB%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9)でファイルをFileStoreにアップロードする。
![](https://docs.databricks.com/_images/upload-data-upload-step.png)
- [Create table UI(英語)](https://docs.databricks.com/data/tables.html#create-table-ui)でデータを[テーブル](https://docs.databricks.com/data/tables.html)にアップロードする。こちらは、ランディングページの**Import & Explore Data**からもアクセスできます。
![](https://docs.databricks.com/_images/import-landing.png)

これらの方法でインポートされたファイルは[FileStore(英語)](https://docs.databricks.com/data/filestore.html#filestore)に格納されます。

実運用環境においては、[DBFS CLI(英語)](https://docs.databricks.com/dev-tools/cli/dbfs-cli.html)、[DBFS API(英語)](https://docs.databricks.com/dev-tools/api/latest/dbfs.html)、[Databricks file system utilities \(dbutils\.fs\)(英語)](https://docs.databricks.com/dev-tools/databricks-utils.html#dbutils-fs)を用いて、明示的にファイルをアップロードすることをお勧めします。

データにアクセスするための様々な[データソース](https://docs.databricks.com/data/data-sources/index.html)もご確認ください。

# Spark APIを用いてクラスターノードでデータを読み込む

[Spark API(英語)](https://docs.databricks.com/getting-started/spark/dataframes.html#spark-dataframes)を用いてDBFSにインポートされたデータをApache Sparkデータフレームに読む込みます。例えば、CSVファイルをインポートしたのであれば、これらの例を用いてデータを読み込むことができます。

> **ティップス**
簡単にアクセスできるように、テーブルを作成することをお勧めします。詳細は[Databases and tables(英語)](https://docs.databricks.com/data/tables.html#tables)を参照ください。

**Python**

```python
sparkDF = spark.read.csv('/FileStore/tables/state_income-9f7c5.csv', header="true", inferSchema="true")
```

**R**

```R
sparkDF <- read.df(source = "csv", path = "/FileStore/tables/state_income-9f7c5.csv", header="true", inferSchema = "true")
```

**Scala**

```scala
val sparkDF = spark.read.format("csv")
.option("header", "true")
.option("inferSchema", "true")
.load("/FileStore/tables/state_income-9f7c5.csv")
```

# ローカルAPIを用いてクラスターノードでデータを読み込む

また、DBFSにインポートされたデータを、ローカルファイルAPIを用いてSparkのドライバーノードで動作するプログラムで読み込むことができます。例えば：

**Python**

```python
pandas_df = pd.read_csv("/dbfs/FileStore/tables/state_income-9f7c5.csv", header='infer')
```

**R**

```R
df = read.csv("/dbfs/FileStore/tables/state_income-9f7c5.csv", header = TRUE)
```

# アップロードしたデータの編集

Databricksでインポートしたデータを直接編集することはできません、しかし、[Spark APIs(英語)](https://docs.databricks.com/getting-started/spark/dataframes.html#spark-dataframes)、[DBFS CLI(英語)](https://docs.databricks.com/dev-tools/cli/dbfs-cli.html)、[DBFS API(英語)](https://docs.databricks.com/dev-tools/api/latest/dbfs.html)、[Databricks file system utilities \(dbutils\.fs\)(英語)](https://docs.databricks.com/dev-tools/databricks-utils.html#dbutils-fs)を用いてデータを上書きすることができます。

DBFSからデータを削除するには、上記のツール、APIを使用します。例えば、[Databricks Utilities(英語)](https://docs.databricks.com/dev-tools/databricks-utils.html)の`dbutils.fs.rm`コマンドを使用します：

**Python**

```Pytohn
dbutils.fs.rm("dbfs:/FileStore/tables/state_income-9f7c5.csv", true)
```

> **警告！**
削除したデータを復元することはできません。

### Databricks 無料トライアル

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