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”입니다.
예:
- 실제 '에이커' 열을 표시합니다.
- '에이커' 열에 100을 추가합니다.
- '에이커' 열에서 100을 뺍니다.
- '에이커' 열에 100을 곱합니다.
- '에이커' 열을 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(열_이름) – 지정된 열의 모든 요소 중 최대 요소를 반환합니다.
예:
- 'Acres'의 합계, 평균, 개수, 최소 및 최대 요소를 찾습니다.
- '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를 생성할 필요가 없습니다.