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」です。
例:
- 実際の「エーカー」列を表示します。
- 「エーカー」列に 100 を追加します。
- 「エーカー」列から 100 を引きます。
- 「エーカー」列に 100 を掛けます。
- 「エーカー」列を 100 で割ります。
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(列名) – 指定された列のすべての要素のうち最大の要素を返します。
例:
- 「エーカー」の合計、平均、数、最小、および最大の要素を見つけます。
- 「Soil_status」列で最小要素と最大要素を見つけます。
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 を作成する必要はありません。