列の作成
この章では、Spark の DataFrame クラスで定義されているメソッドを使って、よくあるデータ操作を行う方法を学びます。
まずは列ごとの演算を見ていきましょう。Spark では .withColumn() メソッドを使います。これは2つの引数を取り、1つ目は新しい列名の文字列、2つ目は新しい列そのものです。
新しい列は Column クラスのオブジェクトである必要があります。これは df.colName のように DataFrame から列を取り出すだけで簡単に作成できます。
Spark の DataFrame は pandas と少し扱いが異なります。Spark の DataFrame は「不変(immutable)」で、元のオブジェクトを書き換えられないため、列をその場で更新することはできません。
そのため、これらのメソッドはすべて新しい DataFrame を返します。元の DataFrame を上書きしたい場合は、次のように戻り値を代入し直します。
df = df.withColumn("newCol", df.oldCol + 1)
このコードは、df と同じ列に加えて新しい列 newCol を持つ DataFrame を作成します。newCol の各要素は、対応する oldCol の値に 1 を加えたものです。
既存の列を上書きしたい場合は、最初の引数にその列名を指定するだけでOKです!
ワークスペースには、spark という名前の SparkSession がすでに用意されています。
この演習はコースの一部です
PySpark入門
演習の手順
.catalog内のflightsテーブルをspark.table()メソッドで読み込み、DataFrame を作成してflightsという変数に保存します(引数は"flights")。flights.show()を使って先頭を表示します。出力を確認すると、air_time列にはフライトの所要時間(分)が入っています。flightsに新しい列duration_hrsを追加し、各フライトの所要時間(時間)を格納します(air_timeを 1 時間あたりの分数で割ります)。
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
# Create the DataFrame flights
flights = spark.table(____)
# Show the head
____.____()
# Add duration_hrs
flights = flights.withColumn(____)