DatabricksマーケットプレースにShutterstockが追加されました！

こちらの記事で発表されました。

https://www.databricks.com/blog/databricks-marketplace-welcomes-42-new-data-providers-q1-2024

こちらのデータセットとなります。

https://marketplace.databricks.com/details/3da47c97-478c-4935-a0e7-c61502c7c7b7/Shutterstock_Free-Sample-Dataset-1000-High-Resolution-Images-Metadata

> 我々における最初のボリュームのリスティングとなる、[Shutterstockの画像のDatabricksマーケットプレースへの提供によって](https://marketplace.databricks.com/details/3da47c97-478c-4935-a0e7-c61502c7c7b7/Shutterstock_Free-Sample-Dataset-1000-High-Resolution-Images-Metadata)膨大なコレクションを提供する革新的なコラボレーションを発表できることを嬉しく思っています。Shutterstockの5.5億の画像ライブラリから提供された1,000の画像と関連メタデータから構成される無料のサンプルデータセットは即座のアクセスで利用できるようになっています。
>
> Shutterstockで実現できそうなユースケースはどのようなものでしょうか？店舗に50,000の商品を持ち、毎年の回転率が20%である架空の小売業者Berkeley FoodMartを想像してみましょう。彼らはすべての商品の説明文を手動でメンテナンスすることに苦戦しています。今では、新たな商品の画像からメタデータとキーワードを生成するimage-to-textモデルを構築するために、Shutterstockのデータセットと堅牢なメタデータを活用することができます。Shutterstockの画像データセットは、Berkeley FoodMartがきれいなデータの源泉を用いて自身のモデルを安全にキュレーションすることができます。ユーザーフレンドリーな商品説明分を生成するためにLLMを用いてこれらのキーワードを活用することもできるでしょう。

# データへのアクセス

マーケットプレースからアクセスし、**即時アクセス権を取得**をクリックします。
![Screenshot 2024-06-08 at 10.07.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/aef0e09c-9abd-8258-38f0-854b2c03f912.png)

データセット(テーブル)とファイル(ボリューム)が含まれていることがわかります。
![Screenshot 2024-06-08 at 10.08.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/f7fc0ed3-4f1f-c597-62ab-158d02cdb550.png)

必要に応じてカタログ名を変更して**即時アクセス権を取得**をクリックします。
![Screenshot 2024-06-08 at 10.08.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/27a75db9-309d-bff0-f86f-b63866f75689.png)

**開く**をクリックします。
![Screenshot 2024-06-08 at 10.09.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/88807b32-6c76-6e07-b15d-9565d3710d77.png)

カタログとして登録されました。
![Screenshot 2024-06-08 at 10.09.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/5c0703d8-4436-fc46-e9ed-c12cdf3a9da4.png)

画像ファイルも確認できます。
![Screenshot 2024-06-08 at 10.10.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/3237aaf6-f8cb-58d2-5963-366f60ec70cb.png)

# データの操作

まずはテーブルを確認します。

```sql
SELECT ASSET_ID, JAPANESE_DESCRIPTION FROM set3_image_people_detection_asset_metadata;
```

日本語の説明文もあります。`ASSET_ID`がキーですね。
![Screenshot 2024-06-08 at 10.45.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/38f2e0b9-0594-60b7-9853-7a1f40c6b77e.png)

ファイル名の拡張子を除外したものも`ASSET_ID`のようです。[こちら](https://stackoverflow.com/questions/50392061/spark-how-to-get-filename-with-parent-folder-from-dataframe-column)を参考にファイルパスから`ASSET_ID`を抽出します。

```py
from pyspark.sql.functions import input_file_name, regexp_extract

# 画像データソースを用いて画像データソースを作成します
image_df = spark.read.format("image").load(
    "/Volumes/shutterstock_free_sample_dataset_people_detection_200_high_res_images_metadata/sample_datasets/set3_image_people_detection_files/medium/"
)

# 拡張子を除くファイル名を抽出
image_df = image_df.withColumn("sourcefile", input_file_name())
regex_str = "([^\/]+[^\/]+).jpg$"
image_df = image_df.withColumn("ASSET_ID", regexp_extract("sourcefile", regex_str, 1))

# データフレームを表示します
display(image_df)
```
![Screenshot 2024-06-08 at 10.47.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/1dacd07f-f043-d857-e49d-0b4ed19e5a12.png)

SQLを使うので一次ビューとして登録します。

```py
image_df.createOrReplaceTempView("image_df")
```
メタデータのテーブルとjoinします。

```sql
%sql
select
  image_df.ASSET_ID,
  image_df.image,
  meta.JAPANESE_DESCRIPTION
from
  image_df
  INNER join shutterstock_free_sample_dataset_people_detection_200_high_res_images_metadata.sample_datasets.set3_image_people_detection_asset_metadata meta ON image_df.ASSET_ID = meta.ASSET_ID
LIMIT
  10;
```

![Screenshot 2024-06-08 at 10.51.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/1c7fbcce-bd7c-e24c-b7ef-9eb4c053c60e.png)

`set3_image_people_detection_model_metadata`には年代のデータも含まれているので、いろいろなユースケースで活用できそうです。


### はじめてのDatabricks

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

### Databricks無料トライアル

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