はじめに
Databricksでデータを取り込む際に、取り込み元ファイルの情報も取得する方法をまとめます。
非Unity Catalog環境
input_file_name()を使用します。
pyspark.sql.functions.input_file_name
pyspark
from pyspark.sql.functions import input_file_name,current_timestamp
df = (spark
.read
.format("csv")
.load(<ファイルパス>)
.select("*"
,current_timestamp().alias("_ingest_timestamp")
,input_file_name().alias("_file_name")
)
)
こんな感じでとれます。
Unity Catalog環境下
以下のようにサポートされない旨が表示されます。
ファイル メタデータ列 という形で取得が可能です。
例:
pyspark
df = (spark
.read
.format("csv")
.load(<ファイルパス>)
.select("*","_metadata")
)
こんな感じでとれます。
追記
シングルユーザーモードであればUnity Catalog 環境でもinput_file_nameが動作しました。
autoloaderといい、pythonの関数はけっこうこういうのが多いみたいです。