PySpark SelectExpr()

Pyspark Selectexpr



PySpark の selectExpr() 関数を使用すると、TABLE や VIEW を作成せずに式を直接評価できます。この関数は、select() メソッドと同様の pyspark.sql.DataFrame モジュールで使用できます。 selectExpr() を使用すると、列の表示、列に対する関数の適用、式の評価、集計操作の実行などを行うことができます。一度に複数の列を評価/指定することも可能です。

Pyspark.sql.DataFrame.selectExpr()

selectexpr() 関数は、列/式のセットを取得し、指定された式/列に基づいて DataFrame を返します。この関数にはカンマ区切りで複数の式を指定できます。 DataFrame を表示するには、show()/collect() 関数を使用できます。

構文:







pyspark_DataFrame_object.selectExpr(“列”/“式”)

ここで、pyspark_DataFrame_object は入力 PySpark DataFrame です。



シナリオ 1: 列の選択

このシナリオでは、selectExpr() 関数を使用して PySpark DataFrame から特定の列を選択する方法を見ていきます。



使用される式は「existing_column as new_name」です。ここで、existing_column は DataFrame に存在する列名であり、new_name (エイリアス) として表示されます。





例:

5 つの行と列を持つ「agri_df」という名前の PySpark DataFrame を作成します。 「Soil_status」列と「Soil_Type」列を「STATUS」と「TYPE」として取得します。

pysparkをインポートする

pyspark.sql から SparkSession をインポート

linuxhint_spark_app = SparkSession.builder.appName( 「Linux のヒント」 ).getOrCreate()

# 5 行 5 列のデータを農業化する

アグリ=[{ '土壌の種類' : '黒' 「灌漑_利用可能性」 : 'いいえ' 「エーカー」 : 2500 「土壌の状態」 : 'ドライ'
'国' : 'アメリカ合衆国' }、

{ '土壌の種類' : '黒' 「灌漑_利用可能性」 : 'はい' 「エーカー」 : 3500 「土壌の状態」 : '濡れた'
'国' : 'インド' }、

{ '土壌の種類' : なし 「灌漑_利用可能性」 : 'はい' 「エーカー」 : 210 「土壌の状態」 : 'ドライ'
'国' : 'イギリス' }、

{ '土壌の種類' : '他の' 「灌漑_利用可能性」 : 'いいえ' 「エーカー」 : 1000 「土壌の状態」 : '濡れた'
'国' : 'アメリカ合衆国' }、

{ '土壌の種類' : '砂' 「灌漑_利用可能性」 : 'いいえ' 「エーカー」 : 500 「土壌の状態」 : 'ドライ'
'国' : 'インド' }]



# 上記のデータからデータフレームを作成します

agri_df = linuxhint_spark_app.createDataFrame(agri)

# Soil_status と Soil_Type を「STATUS」と「TYPE」として取得します。

agri_df.selectExpr( 「Soil_status を STATUS として」 「TYPEとしてSoil_Type」 )。見せる()

出力:



シナリオ 2: 条件式の指定

このシナリオでは、selectExpr() 関数内の条件を評価する方法を見ていきます。

使用される式は「existing_column 演算子の値」です。ここで、existing_column は DataFrame に存在する列名であり、この列の各値を文字列/値と比較します。

例 1:

国が「アメリカ」かどうかを確認します。ここでは等号 (=) 演算子が使用されています。

pysparkをインポートする

pyspark.sql から SparkSession をインポート

linuxhint_spark_app = SparkSession.builder.appName( 「Linux のヒント」 ).getOrCreate()

# 5 行 5 列のデータを農業化する

アグリ=[{ '土壌の種類' : '黒' 「灌漑_利用可能性」 : 'いいえ' 「エーカー」 : 2500 「土壌の状態」 : 'ドライ'
'国' : 'アメリカ合衆国' }、

{ '土壌の種類' : '黒' 「灌漑_利用可能性」 : 'はい' 「エーカー」 : 3500 「土壌の状態」 : '濡れた'
'国' : 'インド' }、

{ '土壌の種類' : なし 「灌漑_利用可能性」 : 'はい' 「エーカー」 : 210 「土壌の状態」 : 'ドライ'
'国' : 'イギリス' }、

{ '土壌の種類' : '他の' 「灌漑_利用可能性」 : 'いいえ' 「エーカー」 : 1000 「土壌の状態」 : '濡れた'
'国' : 'アメリカ合衆国' }、

{ '土壌の種類' : '砂' 「灌漑_利用可能性」 : 'いいえ' 「エーカー」 : 500 「土壌の状態」 : 'ドライ'
'国' : 'インド' }]



# 上記のデータからデータフレームを作成します

agri_df = linuxhint_spark_app.createDataFrame(agri)

# 国が「USA」かどうかを確認します。

agri_df.selectExpr( 「国 = 'アメリカ'」 )。見せる()

出力:

例 2:

Soil_Type が NULL かどうかを確認します。 NULL キーワードは、値が NULL かどうかをチェックします。 null の場合は true が返されます。それ以外の場合は false が返されます。最後の式は「Soil_Type IS NULL」です。

pysparkをインポートする

pyspark.sql から SparkSession をインポート

linuxhint_spark_app = SparkSession.builder.appName( 「Linux のヒント」 ).getOrCreate()

# 5 行 5 列のデータを農業化する

アグリ=[{ '土壌の種類' : '黒' 「灌漑_利用可能性」 : 'いいえ' 「エーカー」 : 2500 「土壌の状態」 : 'ドライ'
'国' : 'アメリカ合衆国' }、

{ '土壌の種類' : '黒' 「灌漑_利用可能性」 : 'はい' 「エーカー」 : 3500 「土壌の状態」 : '濡れた'
'国' : 'インド' }、

{ '土壌の種類' : なし 「灌漑_利用可能性」 : 'はい' 「エーカー」 : 210 「土壌の状態」 : 'ドライ'
'国' : 'イギリス' }、

{ '土壌の種類' : '他の' 「灌漑_利用可能性」 : 'いいえ' 「エーカー」 : 1000 「土壌の状態」 : '濡れた'
'国' : 'アメリカ合衆国' }、

{ '土壌の種類' : '砂' 「灌漑_利用可能性」 : 'いいえ' 「エーカー」 : 500 「土壌の状態」 : 'ドライ'
'国' : 'インド' }]



# 上記のデータからデータフレームを作成します

agri_df = linuxhint_spark_app.createDataFrame(agri)

# Soil_Type が NULL かどうかを確認します。

agri_df.selectExpr( 「Soil_Type が NULL です」 )。見せる()

出力:

シナリオ 3: 式の評価

このシナリオでは、数式を指定する方法を見ていきます。使用される式は「existing_column math_expression」です。

例:

  1. 実際の「エーカー」列を表示します。
  2. 「エーカー」列に 100 を追加します。
  3. 「エーカー」列から 100 を引きます。
  4. 「エーカー」列に 100 を掛けます。
  5. 「エーカー」列を 100 で割ります。
pysparkをインポートする

pyspark.sql から SparkSession をインポート

linuxhint_spark_app = SparkSession.builder.appName( 「Linux のヒント」 ).getOrCreate()

# 5 行 5 列のデータを農業化する

アグリ=[{ '土壌の種類' : '黒' 「灌漑_利用可能性」 : 'いいえ' 「エーカー」 : 2500 「土壌の状態」 : 'ドライ'
'国' : 'アメリカ合衆国' }、

{ '土壌の種類' : '黒' 「灌漑_利用可能性」 : 'はい' 「エーカー」 : 3500 「土壌の状態」 : '濡れた'
'国' : 'インド' }、

{ '土壌の種類' : なし 「灌漑_利用可能性」 : 'はい' 「エーカー」 : 210 「土壌の状態」 : 'ドライ'
'国' : 'イギリス' }、

{ '土壌の種類' : '他の' 「灌漑_利用可能性」 : 'いいえ' 「エーカー」 : 1000 「土壌の状態」 : '濡れた'
'国' : 'アメリカ合衆国' }、

{ '土壌の種類' : '砂' 「灌漑_利用可能性」 : 'いいえ' 「エーカー」 : 500 「土壌の状態」 : 'ドライ'
'国' : 'インド' }]



# 上記のデータからデータフレームを作成します

agri_df = linuxhint_spark_app.createDataFrame(agri)

# エーカー列の減算、加算、除算、乗算を行う 4 つの式を記述します。

agri_df.selectExpr( 「エーカー」 「エーカー - 100」 「エーカー * 100」 「エーカー+100」 「エーカー / 100」 )。見せる()

出力:

シナリオ 4: 集計関数の適用

SUM(列名) – 指定された列の合計値を評価します。

MEAN(列名) – 指定された列の平均値を評価します。

MIN(列名) – 指定された列のすべての要素のうち最小の要素を返します。

MAX(列名) – 指定された列のすべての要素のうち最大の要素を返します。

例:

  1. 「エーカー」の合計、平均、数、最小、および最大の要素を見つけます。
  2. 「Soil_status」列で最小要素と最大要素を見つけます。
pysparkをインポートする

pyspark.sql から SparkSession をインポート

linuxhint_spark_app = SparkSession.builder.appName( 「Linux のヒント」 ).getOrCreate()

# 5 行 5 列のデータを農業化する

アグリ=[{ '土壌の種類' : '黒' 「灌漑_利用可能性」 : 'いいえ' 「エーカー」 : 2500 「土壌の状態」 : 'ドライ'
'国' : 'アメリカ合衆国' }、

{ '土壌の種類' : '黒' 「灌漑_利用可能性」 : 'はい' 「エーカー」 : 3500 「土壌の状態」 : '濡れた'
'国' : 'インド' }、

{ '土壌の種類' : なし 「灌漑_利用可能性」 : 'はい' 「エーカー」 : 210 「土壌の状態」 : 'ドライ'
'国' : 'イギリス' }、

{ '土壌の種類' : '他の' 「灌漑_利用可能性」 : 'いいえ' 「エーカー」 : 1000 「土壌の状態」 : '濡れた'
'国' : 'アメリカ合衆国' }、

{ '土壌の種類' : '砂' 「灌漑_利用可能性」 : 'いいえ' 「エーカー」 : 500 「土壌の状態」 : 'ドライ'
'国' : 'インド' }]



# 上記のデータからデータフレームを作成します

agri_df = linuxhint_spark_app.createDataFrame(agri)

# 集計操作

agri_df.selectExpr( 「合計(エーカー)」 「MEAN(エーカー)」 「カウント(エーカー)」 「AVG(エーカー)」 「MIN(エーカー)」
「MAX(エーカー)」 )。見せる()

agri_df.selectExpr( 「MIN(土壌状態)」 「MAX(土壌状態)」 )。見せる()

出力:

結論

式の列/セットを取得し、指定された式/列に基づいて DataFrame を返す selectExpr() 関数について説明しました。この一環として、selectExpr() が適用される 4 つの主要なシナリオを学習しました。この関数にはカンマで区切って複数の式を指定できます。 selectExpr() 関数を使用するために TEMPORARY VIEW を作成する必要はありません。