集約を一歩ずつ
ドット記法とSQLのどちらを使うかは個人の好みです。ただし、動画の演習で示したように、SQLのほうが簡潔になる場合があります。また動画レッスンで示したとおり、ドット記法では直感に反する結果になることがあります。たとえば、同じ列に対して2回目の集約を行うと、先に行った集約が上書きされてしまう場合です。動画でも述べたように、pyspark の agg の基本構文では、1回の呼び出しにつき各列に対して1つの集約しか指定できません。
次の演習では、各路線の最初の出発時刻を計算します。
最初の2つのクエリは一致します。しかし、次の2つは一致しません。なぜか説明できますか?
この演習はコースの一部です
Pythonで学ぶ Spark SQL 入門
演習の手順
- 空欄を埋めて、最初の2つのコマンドが同一の結果を表示するようにしてください。
- 4つ目の結果(
result)は、直前の行を素朴に再現しようとしたものですが、直感に反して異なる結果になります。どのように違うでしょうか? 空欄を埋めて、resultの2番目の列名を出力してください。
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
# Give the identical result in each command
spark.sql('SELECT train_id, MIN(time) AS start FROM schedule GROUP BY train_id').show()
df.groupBy('____').agg({'time':'____'}).withColumnRenamed('____', 'start').show()
# Print the second column of the result
spark.sql('SELECT train_id, MIN(time), MAX(time) FROM schedule GROUP BY train_id').show()
result = df.groupBy('train_id').agg({'time':'min', 'time':'max'})
result.show()
print(result.columns[____])