始める無料で始める

ドット記法のウィンドウ関数をSQLに変換する

各行に「次の停車駅に到着するまでの分数」を持たせる列を、列車の時刻表に追加します。

  • df.columns == ['train_id', 'station', 'time'] のデータフレーム df があります。
  • dfschedule という名前のSQLテーブルとして登録されています。
  • 次のウィンドウ関数クエリはドット記法を使っています。新しいデータフレーム dot_df を返します。
window = Window.partitionBy('train_id').orderBy('time')
dot_df = df.withColumn('diff_min', 
                    (unix_timestamp(lead('time', 1).over(window),'H:m') 
                     - unix_timestamp('time', 'H:m'))/60)

unix_timestamp 関数は、SQLの UNIX_TIMESTAMP 関数と同等である点に注意してください。

サンプルコードのスキャフォールディングに注意してください。スキャフォールディング(プレースホルダーのアンダースコア _____)に合わせて解答を整形すると、書式上の問題による誤った不正解判定を防げます。

この演習はコースの一部です

Pythonで学ぶ Spark SQL 入門

コースを見る

演習の手順

  • dot_df と同一の結果を得るSQLクエリを作成してください。クエリはスキャフォールディング(プレースホルダーのアンダースコア _____)に従って整形してください。

実践的なインタラクティブ演習

このサンプルコードを完成させて、この演習に挑戦してみましょう。

# Create a SQL query to obtain an identical result to dot_df
query = """
SELECT *, 
(____(____(time, 1) ____ (____ BY train_id ____ BY time),'H:m') 
 - ____(time, 'H:m'))/60 AS diff_min 
FROM schedule 
"""
sql_df = spark.sql(query)
sql_df.show()
コードを編集して実行