始める無料で始める

Selecting II

SQLと同様に、.select() メソッドを使って列ごとの演算を行うこともできます。df.colName という表記で列を選択するとき、任意の列演算を行え、.select() は変換後の列を返します。たとえば、

flights.select(flights.air_time/60)

は、分ではなく時間単位のフライト所要時間の列を返します。選択している列は、.alias() メソッドで名前を変更することもできます。たとえば、duration_hrs という列(DataFrameには存在しません)を .select() したい場合は、次のように書けます。

flights.select((flights.air_time/60).alias("duration_hrs"))

同等のSpark DataFrameメソッドである .selectExpr() は、SQL式を文字列として受け取ります。

flights.selectExpr("air_time/60 as duration_hrs")

ここで使っているSQLの as キーワードは、.alias() メソッドと同等です。複数列を選択するには、複数の文字列を渡せます。

SparkSessionspark と、Spark DataFrame の flights は、すでにワークスペースに用意されています。

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

PySpark入門

コースを見る

演習の手順

各フライトの平均速度を、2通りの方法で計算した表を作成します。

  • distanceair_time(時間に換算)で割って平均速度を計算します。.alias() メソッドを使って、この列名を "avg_speed" にしてください。出力は変数 avg_speed に保存します。
  • "origin", "dest", "tailnum" と、avg_speed(クォートなし)を選択します。これを speed1 として保存します。
  • 同じ表を、.selectExpr() とSQL式を含む文字列を使って作成します。これを speed2 として保存します。

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

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

# Define avg_speed
avg_speed = (flights.____/(flights.____/60)).alias("____")

# Select the correct columns
speed1 = flights.select("origin", "dest", "tailnum", avg_speed)

# Create the same table using a SQL expression
speed2 = flights.selectExpr("____", "____", "____", "distance/(air_time/60) as ____")
コードを編集して実行