Seleção II
Assim como no SQL, você também pode usar o método .select()
para realizar operações por colunas. Quando estiver selecionando uma coluna usando a notação df.colName
, você poderá executar qualquer operação com colunas, e o método .select()
retornará a coluna transformada. Por exemplo:
flights.select(flights.air_time/60)
retorna uma coluna de durações de voo em horas em vez de minutos. Você também pode usar o método .alias()
para renomear uma coluna que está selecionando. Portanto, se você quiser usar .select()
para selecionar a coluna duration_hrs
(que não está no DataFrame), poderá fazer o seguinte:
flights.select((flights.air_time/60).alias("duration_hrs"))
O método equivalente de DataFrames do Spark .selectExpr()
recebe expressões SQL como uma string:
flights.selectExpr("air_time/60 as duration_hrs")
sendo que a palavra-chave as
do SQL equivale ao método .alias()
. Para selecionar várias colunas, você pode passar várias strings.
Lembre-se de que uma SparkSession
chamada spark
já está em seu espaço de trabalho, junto com o DataFrame flights
do Spark.
Este exercício faz parte do curso
Introdução ao PySpark
Instruções do exercício
Crie uma tabela com a velocidade média de cada voo nos dois sentidos.
- Calcule a velocidade média dividindo a distância (
distance
) pelo tempo de voo (air_time
) convertido em horas. Use o método.alias()
para chamar essa coluna de"avg_speed"
. Salve a saída como a variávelavg_speed
. - Selecione as colunas
"origin", "dest", "tailnum"
eavg_speed
(sem aspas!). Salve o resultado comospeed1
. - Crie a mesma tabela usando
.selectExpr()
e uma string contendo uma expressão SQL. Salve o resultado comospeed2
.
Exercício interativo prático
Experimente este exercício completando este código de exemplo.
# Define avg_speed
avg_speed = (flights.____/(flights.____/60)).alias("____")
# Select the correct columns
speed1 = flights.select("origin", "dest", "tailnum", avg_speed)
# Create the same table using a SQL expression
speed2 = flights.selectExpr("____", "____", "____", "distance/(air_time/60) as ____")