pyspark.pandasライブラリのsqlメソッドのSQLクエリ内でDataFrameを呼び出す方法

databricks環境でデータパイプライン構築をしていた際、加工したDataframeをSQLクエリ内に埋め込んでtableの代わりに利用していました。注意点として、f構文無しの場合「{df}」と記述し、f構文ありの場合「{{df}}」にする必要があります。

f構文を利用しない場合

加工したDataframe(df_target)に対して、店舗リストが格納されているDataframe(df_store_list)と照合し、不足している店舗がないかを確認する際に使用しました。

import pyspark.pandas as ps
from textwrap import dedent # 文字列を見やすくするライブラリ

df_store_list = ps.Dataframe() # Dataframeを作成
df_target = ps.Dataframe() # Dataframeを作成

query = dedent("""
               select
                 store_num
               from
                 {df_store_list}
               except
               select
                 store_num
               from
                 {df_target}
               """)

df_result = ps.sql(sql, df_store_list=df_store_list, df_target=df_target) #「埋め込んだ変数名」=「加工したdataframe名」

print(df_result.shape)
display(df_result)

f構文を利用して変数を参照させる場合

{{df}}と囲む必要があります。

import pyspark.pandas as ps
from textwrap import dedent # 文字列を見やすくするライブラリ

df = ps.Dataframe() # Dataframeを作成
deli_plan_day_param = "2024-05-01" # クエリ内に参照する変数

query = dedent(f"""
                select
                  store_num,
                  item_id,
                  stock_qty,
                  deli_plan_bin,
                  deli_plan_day,
                from
                  {{df}}
                where
                  deli_plan_day=to_date("{deli_plan_day_param}")
                """)
# to_date("{deli_plan_day_param}") -> Date型で「2024-05-01」が入っている

df_result = ps.sql(query, df=df) #「埋め込んだ変数名」=「加工したdataframe名」

print(df_result.shape)
display(df_result)

※dataframeを複数埋め込みたい場合は、df1=df1,df2=df2と続けて書きます。

コメント

タイトルとURLをコピーしました