1. 学ぶ
  2. /
  3. コース
  4. /
  5. PySpark入門

Connected

演習

データのフィルタリング

ここまででSQLの基礎がわかってきましたので、Spark DataFrameで同等の操作を行う方法を見ていきます。

ここでは .filter() メソッドを確認します。名前から想像できるように、これはSQLの WHERE 句に相当します。.filter() は、SQL式の WHERE 句に続くような式を文字列として渡すか、Sparkの真偽値(True/False)のカラムを渡すことができます。

例えば、次の2つの式は同じ出力になります。

flights.filter("air_time > 120").show()
flights.filter(flights.air_time > 120).show()

最初のケースでは、.filter() に 文字列 を渡しています。SQLでは、このフィルタ処理は SELECT * FROM flights WHERE air_time > 120 のように書きます。Sparkの .filter() は、文字列として渡す限り、SQLクエリの WHERE 句に入る任意の式(この場合は "air_time > 120")を受け付けます。 このとき、文字列の中でテーブル名は参照しない点に注意してください。これはSQLでも同様です。

2つ目のケースでは、.filter() に 真偽値のカラム を渡しています。flights.air_time > 120 は、flights.air_time の各レコードが120を超える場合に True、それ以外は False になる真偽値のカラムを返すことを思い出してください。

SparkSession の spark はすでにワークスペースに用意されており、Spark DataFrame の flights も利用できます。

指示

100 XP
  • .filter() メソッドを使って、1000マイルを超えて飛行した便を2通りの方法で取得します。
    • まず、距離が1000より大きいかをチェックするSQLの文字列を .filter() に渡し、long_flights1 として保存します。
    • 次に、同じ条件をチェックする真偽値のカラムを .filter() に渡し、long_flights2 として保存します。
  • .show() を使って両方のDataFrameの先頭を表示し、同じ結果になっていることを確認してください。