티스토리 뷰

*스파크 데이터프레임에 대해 다루는 섹션. 데이터프레임 소개와 1부, 2부 정리

 

데이터프레임

  • 데이터를 열과 행으로 나눠 저장하고, 열은 기능/변수를 뜻하고, 행은 데이터를 뜻한다.
  • Spark는 과거에는 RDD라는 구문을 썻으나, 현재는 Dataframe으로 옮겨왔다.

 사용해보면 알겠지만 파이썬은 스네이크 케이스를 보편적으로 쓰는데, 구문에 카멜케이스가 많다. 이건 파이스파크가 스칼라나 자바와 매치되기 쉽게 하기위해 외부로 노출된 API는 카멜케이스를 따르도록 하게 되어있기 때문이다.

 

SparkSession(링크)

  • 스파크를 데이터셋과 데이터프레임 API와 같이 프로그래밍하기 위한 진입 포인트
spark = SparkSession.builder.appName('Basics').getOrCreate()

 

 

pyspark.sql.SparkSession.read

  • 데이터를 데이터프레임 형태로 읽어오는 DataFrameReader를 리턴한다.

pyspark.sql.DataFrameReader

  • 외부 저장소에서 데이터 프레임을 로드하는 인터페이스. methods: csv(), json(), ...
df = spark.read.json('/kaggle/input/people/people.json')

DataFrame 관련 Attribute & Method ETC.

  • .columns: 컬럼 보기
  • .show(): 불러온 데이터프레임을 보는 메소드
  • printSchema(): 말 그대로 스키마 형태를 볼 수 있음
  • describe(): describe, show로 숫자열과 관련된 통계요약을 볼 수 있음. stddev 자리수 제한도 가능

데이터 불러올때 스키마 정의하기

강의의 예제에서는 다행히 데이터 추론이 잘 이루어졌으나, 보통 아주 좋은 데이터가 아니라면 스키마를 명확히 해줘야 한다. 즉 어떤 열이 어떤 데이터타입인지, 스키마가 정확하게 알고 있어야 한다.

# 타입 툴 불러오기
from pyspark.sql.types import StructField, StringType, IntegerType, StructType

# 구조필드의 리스트 만들기
# 데이터 스키마
# 구조필드의 매개변수는 세가지: 이름, 데이터타입, 널값 가능 여부 - 여기가 True가 아닌데 누락된 값이 있다면 오류 발생
data_schema = [
    StructField('age', IntegerType(), True),
    StructField('name', StringType(), True)
]

# 최종구조
# 필드 인자: 데이터 스키마를 뜻함
final_struct = StructType(fields=data_schema)

# 스키마가 내가 원하는 최종구조임을 명시
df = spark.read.json('/kaggle/input/people/people.json', schema=final_struct)

 


단독 열에서 데이터 프레임을 얻기

df['column']같은 방식은 열을 반환하는데, 단독 열이 들어있는 데이터프레임을 반환하는 방법도 있다. 이 경우가 더 유연성을 얻기 좋아서 보통 이 방식 사용

df.select('age')
type(df.select('age'))

df.head(int)

  • 행 오브젝트를 직접 확인해보기. 반환되는 행 오브젝트 리스트들을 인덱스로 만들 수 있다.
df.head(2)
df.head(2)[0] # 행 오브젝트 반환

여러 개의 컬럼 얻기

df.select(['age', 'name'])


새 열 추가 혹은 기존 열 대체

# 첫번째 인자: 새로운 열 아름
df.withColumn('newage', df['age'])

df.withColumn('double_age', df['age']*2)

# 기존 컬럼 명을 대체하고 싶다면: renamed 가 들어간다.
df.withColumnRenamed('age', 'my_new_age')

 

만약 Raw SQL을 사용하고 싶다면 spark.sql("Raw Query String") 식으로 사용하면 된다.

반응형

'Programming > Data' 카테고리의 다른 글

PySpark : 1. Hadoop, Mapreduce, Spark  (0) 2024.01.28
Kaggle - Intro to Machine Learning  (0) 2020.02.24
Datacamp SQL Fundamentals <1>  (0) 2019.09.24
Numpy <1>  (0) 2019.01.03
댓글