Python/spark(python)
[Spark] databrick으로 데이터 로드하고, 기술통계량 확인하기
ISLA!
2023. 10. 23. 16:22
데이터 업로드하기
메인화면 > Data > Create Table
Notebook에서 데이터 확인하기
- 위 이미지의 형광펜이 데이터 경로이다
- spark.read.csv(경로.csv) 를 입력하여 데이터를 불러온다.
- 참고로, /FileStore는 DBFS 파일 시스템으로 Spark외에는 접근 불가하다.
titanic_sdf = spark.read.csv('/FileStore/tables/titanic_train-1.csv', header=True, inferSchema=True)
print('titanic sdf type:', type(titanic_sdf))
# databrick에서 데이터를 formatting 된 형식으로 확인하기
display(titanic_sdf)
- 데이터 형식이 pyspark의 dataframe이다. (pandas 와 다르다)
- display를 통해 불러온 데이터 확인이 잘 되었다.
- spark 데이터프레임을 pandas 데이터 프레임으로 만들 수 있다. : .select('*').toPandas()
import pandas as pd
# pandas DataFrame을 spark DataFrame으로 부터 생성.
titanic_pdf = titanic_sdf.select('*').toPandas()
print(type(titanic_pdf))
# display()는 pandas DataFrame에도 적용됨.
display(titanic_pdf)
# 데이터프레임의 첫 10줄 출력해보기
- spark 데이터프레임은 .head() 가 안된다.
- spark 에서는 print()를 쓰면 스키마를 출력하고, 데이터 내용이 보이지 않는다.
- 따라서, df.limit(10).show() 식으로 입력하거나, display(df.limit(10)) 식으로 데이터를 볼 수 있다.
print(titanic_sdf.limit(10).show())
titanic_sdf.limit(10).show()
display(titanic_sdf.limit(10))
# info() 기능을 spark에서 써보기
- pandas 의 Info() 기능이 없다.
- 따라서, 컬럼명과 타입은 df.printSchema() 로 확인한다.
- null 값의 개수는 다음과 같은 코드를 참고하여 SQL 식으로 작성하게 된다.
# SQL의 count case when과 유사
from pyspark.sql.functions import count, isnan, when, col
df.select([count(when(isnan(c) | col(c).isNull(), c)).alias(c) for c in titanic_sdf.columns]).show()
# describe() 기능을 spark에서 써보기
- spark도 describe()가 있지만, 내용이 동일하게 다 나오지는 않는다. 👉 건수/평균/표준편차/최소값/최대값
- percentile 값 빼고 다 나오지만, 숫자형 컬럼 외 문자형 컬럼에 대해서도 동일하게 출력된다(특이!)
display(titanic_sdf.describe())
# 데이터 타입 확인 (dtypes)
df.dtypes
# number형 컬럼들에 대해서만 describe()수행
number_columns = [column_name for column_name, dtype in titanic_sdf.dtypes if dtype != 'string']
print(number_columns)
titanic_sdf.select(number_columns).describe().show()
# 데이터의 row, col 개수 확인 (shape 기능)
- spark에는 별도 shape 기능이 없다.
- .columns로 컬럼 내용을 리스트로 반환하고, 그 길이를 출력해야 한다.
# spark DataFrame은 columns 속성으로 컬럼명을 list로 반환.
print('column들:', df.columns)
print('column개수:', len(df.columns))
- 전체 rows의 개수는 count() 메소드 사용
print(titanic_sdf.count())
print(type(titanic_sdf.count()))
- 다음과 같이 한번에 출력하기 위한 코드 작성
- df.count(), len(df.columns)
print('titanic_sdf shape:', (titanic_sdf.count(), len(titanic_sdf.columns)))
728x90