PySpark SelectExpr()

Pyspark Selectexpr



Usando a função selectExpr() no PySpark, podemos avaliar diretamente uma expressão sem criar nenhuma TABLE ou VIEW. Esta função está disponível no módulo pyspark.sql.DataFrame que é semelhante ao método select(). Com selectExpr(), podemos exibir as colunas, aplicar as funções nas colunas, avaliar as expressões, realizar as operações de agregação, etc. Também é possível avaliar/especificar várias colunas ao mesmo tempo.

Pyspark.sql.DataFrame.selectExpr()

A função selectexpr() pega as colunas/conjunto de expressões e retorna o DataFrame com base nas expressões/colunas especificadas. Várias expressões podem ser especificadas nesta função que é separada por vírgula. Para exibir o DataFrame, podemos usar as funções show()/collect().

Sintaxe:







pyspark_DataFrame_object.selectExpr(“Colunas”/”Expressões”)

Aqui, o pyspark_DataFrame_object é o PySpark DataFrame de entrada.



Cenário 1: selecione as colunas

Neste cenário, veremos como selecionar as colunas específicas do PySpark DataFrame usando a função selectExpr().



A expressão usada é “existing_column as new_name”. Aqui, o current_column é o nome da coluna que está presente no DataFrame e é exibido como new_name (Aliasing).





Exemplo:

Crie um PySpark DataFrame chamado “agri_df” com 5 linhas e colunas. Obtenha as colunas “Soil_status” e “Soil_Type” como “STATUS” e “TYPE”.

importar pyspark

de pyspark.sql importar SparkSession

linuxhint_spark_app = SparkSession.builder.appName( 'Dica do Linux' ).getOrCreate()

# dados agrícolas com 5 linhas e 5 colunas

agro =[{ 'Tipo de solo' : 'Preto' , 'Irrigação_disponibilidade' : 'Não' , 'Acres' : 2500 , 'Soil_status' : 'Seco' ,
'País' : 'EUA' },

{ 'Tipo de solo' : 'Preto' , 'Irrigação_disponibilidade' : 'Sim' , 'Acres' : 3500 , 'Soil_status' : 'Molhado' ,
'País' : 'Índia' },

{ 'Tipo de solo' : Nenhum , 'Irrigação_disponibilidade' : 'Sim' , 'Acres' : 210 , 'Soil_status' : 'Seco' ,
'País' : 'REINO UNIDO' },

{ 'Tipo de solo' : 'Outro' , 'Irrigação_disponibilidade' : 'Não' , 'Acres' : 1000 , 'Soil_status' : 'Molhado' ,
'País' : 'EUA' },

{ 'Tipo de solo' : 'Areia' , 'Irrigação_disponibilidade' : 'Não' , 'Acres' : 500 , 'Soil_status' : 'Seco' ,
'País' : 'Índia' }]



# cria o dataframe a partir dos dados acima

agri_df = linuxhint_spark_app.createDataFrame(agri)

# Obtenha o Soil_status e o Soil_Type como 'STATUS' e 'TYPE'.

agri_df.selectExpr( 'Soil_status como STATUS' , 'Soil_Type como TYPE' ).mostrar()

Saída:



Cenário 2: especificando as expressões condicionais

Neste cenário, veremos como avaliar as condições dentro da função selectExpr().

A expressão usada é “existing_column operator value”. Aqui, a current_column é o nome da coluna que está presente no DataFrame e comparamos cada valor dessa coluna com a string/valor.

Exemplo 1:

Verifique se o país é “EUA” ou não. O operador igual a (=) é usado aqui.

importar pyspark

de pyspark.sql importar SparkSession

linuxhint_spark_app = SparkSession.builder.appName( 'Dica do Linux' ).getOrCreate()

# dados agrícolas com 5 linhas e 5 colunas

agro =[{ 'Tipo de solo' : 'Preto' , 'Irrigação_disponibilidade' : 'Não' , 'Acres' : 2500 , 'Soil_status' : 'Seco' ,
'País' : 'EUA' },

{ 'Tipo de solo' : 'Preto' , 'Irrigação_disponibilidade' : 'Sim' , 'Acres' : 3500 , 'Soil_status' : 'Molhado' ,
'País' : 'Índia' },

{ 'Tipo de solo' : Nenhum , 'Irrigação_disponibilidade' : 'Sim' , 'Acres' : 210 , 'Soil_status' : 'Seco' ,
'País' : 'REINO UNIDO' },

{ 'Tipo de solo' : 'Outro' , 'Irrigação_disponibilidade' : 'Não' , 'Acres' : 1000 , 'Soil_status' : 'Molhado' ,
'País' : 'EUA' },

{ 'Tipo de solo' : 'Areia' , 'Irrigação_disponibilidade' : 'Não' , 'Acres' : 500 , 'Soil_status' : 'Seco' ,
'País' : 'Índia' }]



# cria o dataframe a partir dos dados acima

agri_df = linuxhint_spark_app.createDataFrame(agri)

# Verifique se o país é 'EUA' ou não.

agri_df.selectExpr( 'País = 'EUA'' ).mostrar()

Saída:

Exemplo 2:

Verifique se o Soil_Type é NULL ou não. A palavra-chave NULL verifica se o valor é NULL ou não. Se for nulo, true é retornado. Caso contrário, falso é retornado. A expressão final é “Soil_Type IS NULL”

importar pyspark

de pyspark.sql importar SparkSession

linuxhint_spark_app = SparkSession.builder.appName( 'Dica do Linux' ).getOrCreate()

# dados agrícolas com 5 linhas e 5 colunas

agro =[{ 'Tipo de solo' : 'Preto' , 'Irrigação_disponibilidade' : 'Não' , 'Acres' : 2500 , 'Soil_status' : 'Seco' ,
'País' : 'EUA' },

{ 'Tipo de solo' : 'Preto' , 'Irrigação_disponibilidade' : 'Sim' , 'Acres' : 3500 , 'Soil_status' : 'Molhado' ,
'País' : 'Índia' },

{ 'Tipo de solo' : Nenhum , 'Irrigação_disponibilidade' : 'Sim' , 'Acres' : 210 , 'Soil_status' : 'Seco' ,
'País' : 'REINO UNIDO' },

{ 'Tipo de solo' : 'Outro' , 'Irrigação_disponibilidade' : 'Não' , 'Acres' : 1000 , 'Soil_status' : 'Molhado' ,
'País' : 'EUA' },

{ 'Tipo de solo' : 'Areia' , 'Irrigação_disponibilidade' : 'Não' , 'Acres' : 500 , 'Soil_status' : 'Seco' ,
'País' : 'Índia' }]



# cria o dataframe a partir dos dados acima

agri_df = linuxhint_spark_app.createDataFrame(agri)

# Verifique se o Soil_Type é NULL ou não.

agri_df.selectExpr( 'Soil_Type É NULO' ).mostrar()

Saída:

Cenário 3: avaliando as expressões

Neste cenário, veremos como especificar as expressões matemáticas. A expressão que é usada é “existing_column math_expression”.

Exemplo:

  1. Exiba a coluna “Acres” real.
  2. Adicione 100 à coluna “Acres”.
  3. Subtraia 100 da coluna “Acres”.
  4. Multiplique 100 pela coluna “Acres”.
  5. Divida a coluna “Acres” por 100.
importar pyspark

de pyspark.sql importar SparkSession

linuxhint_spark_app = SparkSession.builder.appName( 'Dica do Linux' ).getOrCreate()

# dados agrícolas com 5 linhas e 5 colunas

agro =[{ 'Tipo de solo' : 'Preto' , 'Irrigação_disponibilidade' : 'Não' , 'Acres' : 2500 , 'Soil_status' : 'Seco' ,
'País' : 'EUA' },

{ 'Tipo de solo' : 'Preto' , 'Irrigação_disponibilidade' : 'Sim' , 'Acres' : 3500 , 'Soil_status' : 'Molhado' ,
'País' : 'Índia' },

{ 'Tipo de solo' : Nenhum , 'Irrigação_disponibilidade' : 'Sim' , 'Acres' : 210 , 'Soil_status' : 'Seco' ,
'País' : 'REINO UNIDO' },

{ 'Tipo de solo' : 'Outro' , 'Irrigação_disponibilidade' : 'Não' , 'Acres' : 1000 , 'Soil_status' : 'Molhado' ,
'País' : 'EUA' },

{ 'Tipo de solo' : 'Areia' , 'Irrigação_disponibilidade' : 'Não' , 'Acres' : 500 , 'Soil_status' : 'Seco' ,
'País' : 'Índia' }]



# cria o dataframe a partir dos dados acima

agri_df = linuxhint_spark_app.createDataFrame(agri)

# Escreva 4 expressões para subtrair, adicionar, dividir e multiplicar a coluna de acres.

agri_df.selectExpr( 'Acres' , 'Acres - 100' , 'Acres * 100' , 'Acres + 100' , 'Acres / 100' ).mostrar()

Saída:

Cenário 4: Aplicando as Funções Agregadas

SUM(coluna_nome) – Avalia o valor total na coluna especificada.

MEAN(coluna_nome) – Avalia o valor médio na coluna especificada.

MIN(coluna_nome) – Retorna o elemento mínimo entre todos os elementos na coluna especificada.

MAX(coluna_nome) – Retorna o elemento máximo entre todos os elementos na coluna especificada.

Exemplo:

  1. Encontre os elementos total, médio, contagem, mínimo e máximo de “Acres”.
  2. Encontre os elementos mínimo e máximo na coluna “Soil_status”.
importar pyspark

de pyspark.sql importar SparkSession

linuxhint_spark_app = SparkSession.builder.appName( 'Dica do Linux' ).getOrCreate()

# dados agrícolas com 5 linhas e 5 colunas

agro =[{ 'Tipo de solo' : 'Preto' , 'Irrigação_disponibilidade' : 'Não' , 'Acres' : 2500 , 'Soil_status' : 'Seco' ,
'País' : 'EUA' },

{ 'Tipo de solo' : 'Preto' , 'Irrigação_disponibilidade' : 'Sim' , 'Acres' : 3500 , 'Soil_status' : 'Molhado' ,
'País' : 'Índia' },

{ 'Tipo de solo' : Nenhum , 'Irrigação_disponibilidade' : 'Sim' , 'Acres' : 210 , 'Soil_status' : 'Seco' ,
'País' : 'REINO UNIDO' },

{ 'Tipo de solo' : 'Outro' , 'Irrigação_disponibilidade' : 'Não' , 'Acres' : 1000 , 'Soil_status' : 'Molhado' ,
'País' : 'EUA' },

{ 'Tipo de solo' : 'Areia' , 'Irrigação_disponibilidade' : 'Não' , 'Acres' : 500 , 'Soil_status' : 'Seco' ,
'País' : 'Índia' }]



# cria o dataframe a partir dos dados acima

agri_df = linuxhint_spark_app.createDataFrame(agri)

# operações agregadas

agri_df.selectExpr( 'SUM(Acres)' , 'MÉDIO(Acres)' , 'CONTAGEM (Acres)' , 'AVG (Acres)' , 'MIN(Acres)' ,
'MAX (Acres)' ).mostrar()

agri_df.selectExpr( 'MIN(status_do_solo)' , 'MAX(status_do_solo)' ).mostrar()

Saída:

Conclusão

Discutimos sobre a função selectExpr() que pega as colunas/conjuntos de expressões e retorna o DataFrame com base nas expressões/colunas especificadas. Como parte disso, aprendemos os quatro cenários principais nos quais o selectExpr() é aplicável. Várias expressões podem ser especificadas nesta função que são separadas por vírgula. Não há necessidade de criar uma TEMPORARY VIEW para usar a função selectExpr().