인프런 인공지능 강의를 듣고 내용을 정리한다.
Pandas와 Spark DataFrame의 head() 및 print() 비교
head(N)은 Pandas와 Spark에서 반환값과 print() 적용 시의 출력이 다르다.
Pandas에서 선두 N 개 Record를 가지는 DataFrame을 반환하고, Spark에서 선두 N개 Row Object의 list를 반환한다. 이 반환값을 print() 적용 시 Pandas에서 DataFrame의 내용을 출력하고, Spark에서는 DataFrame의 schema만 출력한다.
limit(N)은 Spark에서 DataFrame의 선두 N개 Record를 가지는 DataFrame을 반환하고 print() 적용 시 DataFrame의 schema만 출력한다. show()와 display()를 이용해 내용을 출력한다.
Pandas DataFrame의 info()에 대응하는 Spark 메소드와 로직
Pandas의 info()는 컬럼명, data type과 not null 건수를 함께 출력하고, Spark는 info() 메소드 대신 printSchema()로 스키마(컬럼명, data type)만 출력한다. not null 건수를 위해서는 별도의 SQL성 쿼리 작성 필요하다.
# SQL의 count case when과 유사한 로직으로 null 값을 포함한 컬럼 확인하기
from pyspark.sql.functions import count, isnan, when, col
titanic_sdf.select([count(when(isnan(c) | col(c).isNull(), c)).alias(c) for c in titanic_sdf.columns]).show()
Pandas와 Spark DataFrame의 describe() 비교
Pandas와 Spark Dataframe은 describe()를 통해 모든 컬럼 값들의 건수 / 평균 / 표준편차 / 최솟값 / 최댓값 등의 정보를 확인할 수 있고, 다만 Spark에서는 percentile 값을 만들지 않는다. Spark에서 Pandas와 다르게 describe() 시 숫자형 컬럼 뿐만 아니라 문자형 컬럼에 대해서도 건수 / 평균 / 표준편차 / 최솟값 / 최댓값을 조사한다.
Pandas DataFrame의 shape에 대응하는 Spark의 로직
Pandas DataFrame의 shape은 row건수와 column 개수를 매우 빠르게 제공한다. Spark는 shape을 제공하지 않으며, column 개수는 spark DataFrame의 columns로 확인, row 건수는 count() 메소드(쿼리성)로 확인한다.
Spark DataFrame의 select()
Spark에서 select()는 SQL의 Select 절과 유사하게 한 개 이상의 컬럼들의 값을 DataFrame 형태로 반환한다. 한 개의 컬럼명, 또는 여러 개의 컬럼명을 인자로 입력할 수 있다.
개별 컬럼명을 문자열 형태로 또는 DataFrame의 컬럼 속성으로 지정할 수 있다.
DataFrame의 컬럼 속성으로 지정 시에는 DataFrame.컬럼명, DataFrame[컬럼명], col(컬럼명) 으로 지정 가능하다.
Spark DataFrame의 filter()
SQL의 where와 유사하게 DataFrame 내의 특정 조건을 만족하는 레코드를 DataFrame으로 반환한다.
복합 조건 and는 & 를, or를 | 를 사용. 개별 조건은 ()로 감싸야 한다.
Spark DataFrame의 orderBy()
1개 이상의 컬럼순으로 정렬을 수행하여 DataFrame으로 반환한다. 정렬 컬럼은 문자열, 또는 컬럼 형태로 입력할 수 있으며, 정렬 컬럼이 여러 개일 경우 개별 컬럼을 인자로 넣거나 List 사용이 가능하다.
오름차순, 내림차순 구분은 ascending=True/False로 구분한다.
정렬 컬럼이 여러 개일 때 개별 컬럼 별로 서로 다른 정렬 옵션을 적용할 경우 ascending=[True, False]와 같은 형태로 이용한다.
orderBy()의 alias로 sort()를 제공한다
'알아두면 손해 없는 정보 저장소' 카테고리의 다른 글
C 모듈을 사용하는 iOS 앱 개발 1 (0) | 2022.03.18 |
---|---|
HP-UX 전용 패키지 다운로드 (0) | 2022.03.17 |
Solaris에서 .tar.gz 파일 untar 안될 때, 해결 방법 (0) | 2022.03.16 |
AIX의 XL C/C++ 설치 및 삭제 (2) | 2022.03.15 |
AIX 용 오픈소스 소프트웨어 패키지 저장소 (0) | 2022.03.14 |