파이스파크 SelectExpr()

Paiseupakeu 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(Aliasing)으로 표시됩니다.





예:

5개의 행과 열이 있는 'agri_df'라는 이름의 PySpark DataFrame을 만듭니다. 'Soil_status' 및 'Soil_Type' 열을 'STATUS' 및 'TYPE'으로 가져옵니다.

파이스파크 가져오기

pyspark.sql에서 SparkSession 가져오기

linuxhint_spark_app = SparkSession.builder.appName( '리눅스 힌트' ).getOrCreate()

# 5개의 행과 5개의 열이 있는 농업 데이터

농업 =[{ '토양_유형' : '검은색' , '관개_가용성' : '아니요' , '에이커스' : 2500 , '토양_상태' : '마른' ,
'국가' : '미국' },

{ '토양_유형' : '검은색' , '관개_가용성' : '예' , '에이커스' : 3500 , '토양_상태' : '젖은' ,
'국가' : '인도' },

{ '토양_유형' : 없음 , '관개_가용성' : '예' , '에이커스' : 210 , '토양_상태' : '마른' ,
'국가' : '영국' },

{ '토양_유형' : '다른' , '관개_가용성' : '아니요' , '에이커스' : 1000 , '토양_상태' : '젖은' ,
'국가' : '미국' },

{ '토양_유형' : '모래' , '관개_가용성' : '아니요' , '에이커스' : 500 , '토양_상태' : '마른' ,
'국가' : '인도' }]



# 위 데이터로 데이터프레임 생성

agri_df = linuxhint_spark_app.createDataFrame(농업)

# Soil_status 및 Soil_Type을 'STATUS' 및 'TYPE'으로 가져옵니다.

agri_df.selectExpr( 'Soil_status as STATUS' , 'Soil_Type을 TYPE으로' ).보여주다()

산출:



시나리오 2: 조건식 지정

이 시나리오에서는 selectExpr() 함수 내에서 조건을 평가하는 방법을 살펴봅니다.

사용되는 표현은 'existing_column 연산자 값'입니다. 여기서 existing_column은 DataFrame에 있는 열 이름이며 이 열의 각 값을 문자열/값과 비교합니다.

예 1:

국가가 'USA'인지 확인하십시오. 여기서는 등호(=) 연산자가 사용됩니다.

파이스파크 가져오기

pyspark.sql에서 SparkSession 가져오기

linuxhint_spark_app = SparkSession.builder.appName( '리눅스 힌트' ).getOrCreate()

# 5개의 행과 5개의 열이 있는 농업 데이터

농업 =[{ '토양_유형' : '검은색' , '관개_가용성' : '아니요' , '에이커스' : 2500 , '토양_상태' : '마른' ,
'국가' : '미국' },

{ '토양_유형' : '검은색' , '관개_가용성' : '예' , '에이커스' : 3500 , '토양_상태' : '젖은' ,
'국가' : '인도' },

{ '토양_유형' : 없음 , '관개_가용성' : '예' , '에이커스' : 210 , '토양_상태' : '마른' ,
'국가' : '영국' },

{ '토양_유형' : '다른' , '관개_가용성' : '아니요' , '에이커스' : 1000 , '토양_상태' : '젖은' ,
'국가' : '미국' },

{ '토양_유형' : '모래' , '관개_가용성' : '아니요' , '에이커스' : 500 , '토양_상태' : '마른' ,
'국가' : '인도' }]



# 위 데이터로 데이터프레임 생성

agri_df = linuxhint_spark_app.createDataFrame(농업)

# 국가가 'USA'인지 확인합니다.

agri_df.selectExpr( '국가 = '미국'' ).보여주다()

산출:

예 2:

Soil_Type이 NULL인지 확인하십시오. NULL 키워드는 값이 NULL인지 여부를 확인합니다. null이면 true가 반환됩니다. 그렇지 않으면 false가 반환됩니다. 마지막 표현은 'Soil_Type IS NULL'입니다.

파이스파크 가져오기

pyspark.sql에서 SparkSession 가져오기

linuxhint_spark_app = SparkSession.builder.appName( '리눅스 힌트' ).getOrCreate()

# 5개의 행과 5개의 열이 있는 농업 데이터

농업 =[{ '토양_유형' : '검은색' , '관개_가용성' : '아니요' , '에이커스' : 2500 , '토양_상태' : '마른' ,
'국가' : '미국' },

{ '토양_유형' : '검은색' , '관개_가용성' : '예' , '에이커스' : 3500 , '토양_상태' : '젖은' ,
'국가' : '인도' },

{ '토양_유형' : 없음 , '관개_가용성' : '예' , '에이커스' : 210 , '토양_상태' : '마른' ,
'국가' : '영국' },

{ '토양_유형' : '다른' , '관개_가용성' : '아니요' , '에이커스' : 1000 , '토양_상태' : '젖은' ,
'국가' : '미국' },

{ '토양_유형' : '모래' , '관개_가용성' : '아니요' , '에이커스' : 500 , '토양_상태' : '마른' ,
'국가' : '인도' }]



# 위 데이터로 데이터프레임 생성

agri_df = linuxhint_spark_app.createDataFrame(농업)

# Soil_Type이 NULL인지 확인합니다.

agri_df.selectExpr( 'Soil_Type이 NULL입니다' ).보여주다()

산출:

시나리오 3: 식 평가

이 시나리오에서는 수학 표현식을 지정하는 방법을 살펴봅니다. 사용되는 표현은 “existing_columnmathetical_expression”입니다.

예:

  1. 실제 '에이커' 열을 표시합니다.
  2. '에이커' 열에 100을 추가합니다.
  3. '에이커' 열에서 100을 뺍니다.
  4. '에이커' 열에 100을 곱합니다.
  5. '에이커' 열을 100으로 나눕니다.
파이스파크 가져오기

pyspark.sql에서 SparkSession 가져오기

linuxhint_spark_app = SparkSession.builder.appName( '리눅스 힌트' ).getOrCreate()

# 5개의 행과 5개의 열이 있는 농업 데이터

농업 =[{ '토양_유형' : '검은색' , '관개_가용성' : '아니요' , '에이커스' : 2500 , '토양_상태' : '마른' ,
'국가' : '미국' },

{ '토양_유형' : '검은색' , '관개_가용성' : '예' , '에이커스' : 3500 , '토양_상태' : '젖은' ,
'국가' : '인도' },

{ '토양_유형' : 없음 , '관개_가용성' : '예' , '에이커스' : 210 , '토양_상태' : '마른' ,
'국가' : '영국' },

{ '토양_유형' : '다른' , '관개_가용성' : '아니요' , '에이커스' : 1000 , '토양_상태' : '젖은' ,
'국가' : '미국' },

{ '토양_유형' : '모래' , '관개_가용성' : '아니요' , '에이커스' : 500 , '토양_상태' : '마른' ,
'국가' : '인도' }]



# 위 데이터로 데이터프레임 생성

agri_df = linuxhint_spark_app.createDataFrame(농업)

# Acres 열을 빼고, 더하고, 나누고, 곱하는 4개의 표현식을 작성합니다.

agri_df.selectExpr( '에이커스' , '에이커 - 100' , '에이커 * 100' , '에이커 + 100' , '에이커 / 100' ).보여주다()

산출:

시나리오 4: 집계 함수 적용

합계(열_이름) – 지정된 열의 합계 값을 평가합니다.

평균(열_이름) – 지정된 열의 평균값을 평가합니다.

최소(열_이름) – 지정된 열의 모든 요소 중 최소 요소를 반환합니다.

MAX(열_이름) – 지정된 열의 모든 요소 중 최대 요소를 반환합니다.

예:

  1. 'Acres'의 합계, 평균, 개수, 최소 및 최대 요소를 찾습니다.
  2. 'Soil_status' 열에서 최소 및 최대 요소를 찾습니다.
파이스파크 가져오기

pyspark.sql에서 SparkSession 가져오기

linuxhint_spark_app = SparkSession.builder.appName( '리눅스 힌트' ).getOrCreate()

# 5개의 행과 5개의 열이 있는 농업 데이터

농업 =[{ '토양_유형' : '검은색' , '관개_가용성' : '아니요' , '에이커스' : 2500 , '토양_상태' : '마른' ,
'국가' : '미국' },

{ '토양_유형' : '검은색' , '관개_가용성' : '예' , '에이커스' : 3500 , '토양_상태' : '젖은' ,
'국가' : '인도' },

{ '토양_유형' : 없음 , '관개_가용성' : '예' , '에이커스' : 210 , '토양_상태' : '마른' ,
'국가' : '영국' },

{ '토양_유형' : '다른' , '관개_가용성' : '아니요' , '에이커스' : 1000 , '토양_상태' : '젖은' ,
'국가' : '미국' },

{ '토양_유형' : '모래' , '관개_가용성' : '아니요' , '에이커스' : 500 , '토양_상태' : '마른' ,
'국가' : '인도' }]



# 위 데이터로 데이터프레임 생성

agri_df = linuxhint_spark_app.createDataFrame(농업)

# 집계 작업

agri_df.selectExpr( 'SUM(에이커)' , '평균(에이커)' , 'COUNT(에이커)' , 'AVG(에이커)' , 'MIN(에이커)' ,
'MAX(에이커)' ).보여주다()

agri_df.selectExpr( 'MIN(토양_상태)' , 'MAX(토양_상태)' ).보여주다()

산출:

결론

열/식 집합을 가져와서 지정된 식/열을 기반으로 DataFrame을 반환하는 selectExpr() 함수에 대해 논의했습니다. 그 일환으로 selectExpr()을 적용할 수 있는 네 가지 주요 시나리오를 배웠습니다. 이 함수에는 쉼표로 구분되는 여러 표현식을 지정할 수 있습니다. selectExpr() 함수를 사용하기 위해 TEMPORARY VIEW를 생성할 필요가 없습니다.