[Spark] Spark / Pandas 데이터프레임 비교 - (1) 특징과 주요 차이점

baekdata·2022년 2월 22일
0

Spark

목록 보기
2/8

판다스 DataFrame과 Spark DataFrame의 비교

a. Pandas DataFrame 특징

  • numpy의 ndarray를 기반으로 tablular 데이터 분석을 쉽고 빠르게 처리하기 위한 목적
  • numpy의 API와 일정 부분 호환성을 유지하는 API 설계
  • numpy의 SIMD 프로세싱으로 빠른 처리 속도
  • 병렬 CPU 처리 불가
  • 단일 서버의 메모리 용량 이상 데이터 처리 불가

b. Spark DataFrame 특징

  • Java Object로 만들어진 RDD 기반
  • SQL과 유사한 형태의 연산을 지원하는 API 구성 (SQL의 탈을 쓴 DataFrame)
  • 병렬 CPU 처리 및 분산 서버 데이터 처리 가능

c. 두 데이터 프레임간 주요 차이

  • Spark DataFrame은 SQL 연산과 비슷한 연산자 제공
    - ex. spark_dataframe.select(’컬럼명’).filter(.....), spark_dataframe.groupBy(’컬럼명’).count(), spark_dataframe.withColumns(’컬럼명’,....)

  • 주요 API: select, filter, withColumns, groupBy
    - spark_df.select(’gender’)
    - spark_df.filter(spark_dt[’gender’] == ‘F’)
    - spark_df.withColumns(’age’, col(age)+10)
    - spark_df.groupBy(’gender’).count()

  • Spark DataFrame의 연산은 대부분 새로운 객체를 반환하는 형태로 구성, 특히 데이터프레임 객체에 직접 수정을 허용하지 않음
    - 판다스에서는 pandas_dataframe.drop(’컬럼명’, axis=1, inplace = True)를 호출하면, 객체 자체에서 컬럼을 드롭 시킴
    - 스파크는 inplace 인자가 없고, drop과 같이 변경 수행 시 새로운 데이터 프레임 반환
    - Spark DataFrame은 [] 연산자 활용이 제한적이고 대신, withColumns() 메소드를 활용함.
    - Spark DataFrame은 여러 컬럼에 접근하기 위해 리스트 []를 이용하지 않음
    - pandas_dataframe.drop([’컬럼1’, ‘컬럼2’,...])와 같이 리스트로 컬럼을 지정함
    - 그러나, 스파크는 spark_dataframe.drop(’컬럼1’, ‘컬럼2)와 같이 개별 컬럼을 인자로 모두 입력함

d. Pandas DataFrame ↔ Pandas DataFrame 변환 방법

# pandas to spark
spark_df = spark.createDataFrame(pandas_df)

# spark to pandas 
pandas_df = spark_df.select(*).toPandas()
profile
글쓰는 데이터 분석가

0개의 댓글