incastle의 콩나물
Pyspark에 대해 알아보자 (1) 본문
spark.apache.org/docs/latest/api/python/getting_started/quickstart.html
Quickstart — PySpark 3.1.1 documentation
This is a short introduction and quickstart for the PySpark DataFrame API. PySpark DataFrames are lazily evaluated. They are implemented on top of RDDs. When Spark transforms data, it does not immediately compute the transformation but plans how to compute
spark.apache.org
해당 문서를 번역하면서 궁금한 내용들을 의식의 흐름대로 정리했습니다.
QuickStart
1. PySpark DataFrames are lazily evaluated.
- RDD의 데이터 로딩 방식 때문에 lazily evaluated하다는 표현을 쓴 것 같다.
2. They are implemented on top of RDDs.
- RDD의 최상단에서 pyspark는 실행된다.
- RDD란? : 쉽게 말해서 스파크 내에 저장된 데이터를 RDD라고 하고, 변경이 불가능하다. 변경을 하려면 새로운 데이터 셋을 생성해야 한다. 출처: https://bcho.tistory.com/1027 [조대협의 블로그]
- 조대협님 블로그에 굉장히 정리가 잘됐다.
3. When Spark transforms data, it does not immediately compute the transformation but plans how to compute later.
- RDD의 데이터 로딩 방식은 Lazy 로딩 컨셉을 사용하는데, 이를 설명한다. 예를 들어 sc.textFile(“파일”)로 파일을 로딩하더라도 실제로 로딩이 되지 않는다. 파일이 로딩돼서 메모리에 올라가는 시점은 action을 이용해서 개선할 당시만 올라간다.
DataFrame Creation
4. 데이터를 다양한 방법으로 만들 수 있음
- list로 받기(좀 귀찮다)
from pyspark.sql import SparkSession
from datetime import datetime, date
import pandas as pd
from pyspark.sql import Row
spark = SparkSession.builder.getOrCreate()
df = spark.createDataFrame([
Row(a=1, b=2., c='string1', d=date(2000, 1, 1), e=datetime(2000, 1, 1, 12, 0)),
Row(a=2, b=3., c='string2', d=date(2000, 2, 1), e=datetime(2000, 1, 2, 12, 0)),
Row(a=4, b=5., c='string3', d=date(2000, 3, 1), e=datetime(2000, 1, 3, 12, 0))
])
df
- schema를 정해주기 : 왠만하면 정해주는 게 좋은 거 같다. 데이터 타입 때문에 짜증 나는 일들이 많이 발생함)
- 나중에 데이터 타입들에 대해서도 한 번 정리해야겠다.
df = spark.createDataFrame([
(1, 2., 'string1', date(2000, 1, 1), datetime(2000, 1, 1, 12, 0)),
(2, 3., 'string2', date(2000, 2, 1), datetime(2000, 1, 2, 12, 0)),
(3, 4., 'string3', date(2000, 3, 1), datetime(2000, 1, 3, 12, 0))
], schema='a long, b double, c string, d date, e timestamp')
df
- pandas로 받기 : 괜찮은 거 같네
pandas_df = pd.DataFrame({
'a': [1, 2, 3],
'b': [2., 3., 4.],
'c': ['string1', 'string2', 'string3'],
'd': [date(2000, 1, 1), date(2000, 2, 1), date(2000, 3, 1)],
'e': [datetime(2000, 1, 1, 12, 0), datetime(2000, 1, 2, 12, 0), datetime(2000, 1, 3, 12, 0)]
})
## pandasa dataframe만들 때 dict으로 묶어서 만듬
df = spark.createDataFrame(pandas_df)
df
'Data Engineering > spark pyspark' 카테고리의 다른 글
pyspark Array<string> column fill na with empty list (0) | 2021.07.12 |
---|