240715 Today I Learn
์คํํฌ๋?
๐ฅ Spark?
SQL, ์คํธ๋ฆฌ๋ฐ, ๋จธ์ ๋ฌ๋ ๋ฐ ๊ทธ๋ํ ์ฒ๋ฆฌ๋ฅผ ์ํ ๊ธฐ๋ณธ ์ ๊ณต ๋ชจ๋์ด ์๋ ๋๊ท๋ชจ ๋ฐ์ดํฐ ์ฒ๋ฆฌ์ฉ ํตํฉ ๋ถ์ ์์ง. ํด๋ผ์ฐ๋์ Apache Hadoop, Apache Mesos, Kubernetes์์ ์์ฒด์ ์ผ๋ก ์คํ๋ ์ ์์ผ๋ฉฐ ๋ค์ํ ๋ฐ์ดํฐ ์์ค์ ๋ํด ์คํ๋ ์ ์์.
→ ๋์ฉ๋ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๋ ๊ฒ์ ํนํ๋ ํ๋ ์ ์ํฌ
ํ์ด์ฌ๊ณผ ๋ฐ์ดํฐ
๋ฉ๋ชจ๋ฆฌ
- RAM = ์์
๊ณต๊ฐ
- ๊ธฐ์ต๋ ์ ๋ณด๋ฅผ ์ฝ์ด๋ด๊ธฐ๋ ํ๊ณ ๋ค๋ฅธ ์ ๋ณด๋ฅผ ๊ธฐ์ต์ํฌ ์๋ ์๋ ๋ฉ๋ชจ๋ฆฌ๋ก์, ์ปดํจํฐ์ ์ฃผ๊ธฐ์ต์ฅ์น, ์์ฉ ํ๋ก๊ทธ๋จ์ ์ผ์์ ๋ก๋ฉ(loading), ๋ฐ์ดํฐ์ ์ผ์์ ์ ์ฅ ๋ฑ์ ์ฌ์ฉ๋จ.
- ์ปดํจํฐ๋ฅผ ๋๋ฉด RAM์ ์ฌ๋ผ๊ฐ ๋ฐ์ดํฐ๋ ์ญ์
- SSD = ์ ์ฅ ๊ณต๊ฐ
- ์ฅ๊ธฐ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ณด๊ด(์ ์ฅ)ํ๋ ๊ณต๊ฐ
- ์ปดํจํฐ๋ฅผ ๊บผ๋, Disk์ ๋ฐ์ดํฐ๋ ์ฌ๋ผ์ง์ง ์์.
CPU
- ํ๋ก๊ทธ๋จ ๋ช ๋ น์ด๋ฅผ ์คํํ๋ ์ผ์ ๋ด๋นํ๋ ์ค์์ฒ๋ฆฌ์ฅ์น
- ๋ช ๋ น์ด๋ฅผ ํด๋ ํ๊ณ ์คํํ๋ ์ฅ์น๋ก, ์ ์ด์ฅ์น, ์ฐ์ฐ์ฅ์น, ๋ ์ง์คํฐ๋ค๋ก ๊ตฌ์ฑ
๐ฉ๐ป ๋ณ๋ ฌ์ฒ๋ฆฌ
ํ๋์ ์์ ์ ์ํด ์ฌ๋ฌ ์ฝ์ด๋ฅผ ์ฌ์ฉํ๋ ๊ฒ. ์คํํฌ ๋ํ ์ฌ๋ฌ ๋์ PC๋ฅผ, ๊ทธ๋ฆฌ๊ณ ๊ฐ PC์ ์ฌ๋ฌ ์ฝ์ด๋ฅผ ๋ชจ๋ ์ฌ์ฉํ๋ค.
๋ฐ์ดํฐ ํ์
๐ฐ ์ค๋ฒํ๋ก
ํฌ๊ธฐ์ ๋ง์ง ์๋ ๋ฐ์ดํฐ๋ฅผ ๋ฃ์ด ์๋ํ์ง ์์ ๊ฒฐ๊ณผ๊ฐ ๋์ค๋๊ฒ.
ํ์ด์ฌ์ ๋ฐ์ดํฐ ํ์ ์ ๊ธฐ๋ณธ์ ์ผ๋ก ๋์ Dynamic์ด๊ธฐ ๋๋ฌธ์ ์๋์ผ๋ก ๋ฐ์ดํฐํ์ด ๋ฐ๋๋ค. ๋ฐ๋ผ์ ํฐ ์ซ์๋ฅผ ๋ค๋ฃจ๋ ๊ฒ์ ๊ต์ฅํ ์ฃผ์ํด์ผํจ.
- ์ ์ (int)
- int8:-128 ~ 127
- int16: -32768 ~ 32727
- Int32: -2,147,483,648 ~ 2,147,483,647
- Int64: -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
- ์์ (float)
- ์ปดํจํฐ๋ ์ด์ง๋ฒ์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์, ์ ์๋ ํํํ๊ธฐ ์ฝ์ง๋ง ์ ์๊ฐ ์๋ ์(0.2, 0.8, ํ์ด์ ๊ฐ์ ์ ์๊ฐ ์๋ ์ซ์)๋ ์ ํํ๊ฒ ํํํ ์ ์์. → ๋ถ๋์์์ ์ฌ์ฉ
- ๋ถ๋์์์ ๋ํ ์ ์์ ๋ง์ฐฌ๊ฐ์ง๋ก float16, float64 ๋ฑ์ ์ฌ์ฉํ๋๋ฐ, ๋ ํฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ ์๋ก ๊ฐ์ด ์ ํํด์ง์ง๋ง ๋ฐ์ดํฐ๊ฐ ๋ ๋ฌด๊ฑฐ์์ง๋ค.
๐ก ๋ถ๋์์์
ํ๋์ ์ซ์๋ฅผ ํํ์ ์๋ฆฟ์๋ก ๊ตฌ๋ถํ์ฌ ํํํ๋ ๊ฒ. ํ์ฐ์ ์ผ๋ก ์ค์ฐจ๋ฅผ ๋๋ฐํจ.
- ๋ฌธ์์ด (String, Category)
- ๋๋ถ๋ถ์ ์ํํธ์จ์ด๋ ์ ๋์ฝ๋๋ฅผ ํ์ฉํด ์ธ์ฝ๋ฉ → ์ด๋ฌํ ๋ฐฉ์์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ง์ด ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ Category ์ฌ์ฉ
- Category(๋ฒ์ฃผ)ํ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฐ ๋ฐ์ดํฐ์ ๊ณ ์ ๊ฐ์ ๋ด๋ถ์์ ์ซ์๋ก ์นํํ์ฌ ์ฌ์ฉํ๊ฒ ๋์ด ๋ฉ๋ชจ๋ฆฌ ์ ์ฝ์ด ๊ฐ๋ฅ.
- ๋ ์ง (Datetime)
- ์ผ๋ฐ์ ์ผ๋ก ์ํํธ์จ์ด๋ค์ Unix Timestamp๋ฅผ ๊ธฐ์ค์ผ๋กํจ.(UTC time zone์ ์ฌ์ฉ)
- ๋ ๋๋ %y, %Y(4์๋ฆฌ)๋ก, ์์ %m, ์ผ์ %d๋ก ํํ
- ์๊ฐ๋time zone์ ์๊ฐ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃฐ ๋ ๊ต์ฅํ ์ค์ํ ๋ถ๋ถ์ผ๋ก ํนํ ์ํํธ์จ์ด๋ ๋ฒ๊ตญ๊ฐ์ ์ด๊ธฐ ๋๋ฌธ์, ์๊ฐ์ ํ์คํ๋ ํ์. → ๋๋ถ๋ถ์ Database ๋ํ timezone ์ ๋ณด๋ฅผ ํ์๋ก ํจ.
ํ์ผ ์ ํ
์๊ณต๊ฐ์ ๋น์ฉ
- ์๊ฐ์ ๋น์ฉ: ์ฝ๊ณ ์ฐ๋๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์
๋๋ค
- ํ์ผ ์ ํ์ ๋ฐ๋ผ ์์ญ๋ฐฐ๊น์ง ์ฐจ์ด๊ฐ ๋ฉ๋๋ค
- ๊ณต๊ฐ์ ๋น์ฉ: ์ ์ฅ๋ ํ์ผ์ ํฌ๊ธฐ๋ฅผ ๊ฐ๋ฆฌํต๋๋ค
- ๋ง์ฐฌ๊ฐ์ง๋ก ํ์ผ ์ ํ์ ๋ฐ๋ผ ์์ญ๋ฐฐ๊น์ง ์ฐจ์ด๊ฐ ๋ฉ๋๋ค
- ์ข ๋ ๋์๊ฐ, ์ /์ถ๋ ฅ ์์ ํ์ํ ๋ฉ๋ชจ๋ฆฌ๋ ๊ต์ฅํ ์ค์ํฉ๋๋ค
ํ์ผ ์ ํ
- csv, txt
- Comma(,) ๋์ Tab(\t)๊ณผ ๊ฐ์ ๋ค๋ฅธ ๊ตฌ๋ถ์seperator๋ฅผ ์ฌ์ฉํ ์๋ ์์.
- ๋ฐ์ดํฐ ์์ ๊ตฌ๋ถ์๊ฐ ๋ค์ด์๋ ๊ฒฝ์ฐ, ๋ฐฉ์ดํ ์๋ ์์ง๋ง ๊นจ์ง ์ํ์ด ์์.
- ๊ฐ์ฅ ๋๋ฆฌ๊ณ , ๋ฌด๊ฑฐ์์ ์๊ท๋ชจ ๋ฐ์ดํฐ๊ฐ ์๋๋ฉด ๋ถ์ ์
- ์ธ์ฝ๋ฉ ๋ฐฉ์์ ๋ฐ๋ผ ๋ค๋ฅด๊ฒ ์ ์ฅ
- json : ๋ณ๋์ ์์ถ ๊ณผ์ ์ด ์์
- ์ ์ฅ๋ ์๋ฃ๋ฅผ python์ dictionary์ ๊ฐ์ ํ์์ผ๋ก ๊ฐ์ ํ๋ฉฐ, ์ด๋ฅผ JSON Object๋ผ ํจ. → {”ํค”:”๊ฐ”}
- ํ์ด์ฌ์ dict๋ฅผ json์ผ๋ก ๋ณํํ์ฌ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, ์ด๋ฅผ dumpํ๋ค๊ณ ํจ.
- ๋น๊ต์ ๊ฐ๋ฐ์์ ์ ํธ๋๊ฐ ๋์ผ๋ฉฐ, ๋น๊ต์ ๋์ฉ๋์ ๋ฐ์ดํฐ๋ JSON์ผ๋ก ๊ด๋ฆฌํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์.
- ์ธ์ฝ๋ฉ ๋ฐฉ๋ฒ์ utf-8์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ผ๋ฐ์
- Pickle : ํ๋์ ์ปดํจํฐ๋ก ๊ฐ์ธ์ฉ ํ๋ก์ ํธ์์ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ ๋ ํธ๋ฆฌํ ๋ฐ์ดํฐ ํ์
→ ๋ฒ์ ๊ณผ ์ด์์ฒด์ ์ ๋ํ ์์กดDependency์ด ์๊ธฐ ๋๋ฌธ์ ํ์ ํ ๋ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ผ๋ฉด ์๋ํ์ง ์์ ์ํ์ด ์์.- csv, json๋ณด๋ค 2~30% ์ ๋ ์ฉ๋์ด ๊ฐ๋ฒผ์ (csv, json)๋ณด๋ค 2~30% ์ ๋ ์ฉ๋์ด ๊ฐ๋ฒผ์)
- nested type์ ์ง์
- ๋ณ๋ ฌ์ฒ๋ฆฌ์์ ๊ทธ๋ฆฌ๊ณ ๋๋ก๋ ๋ถ์ฐ์ฒ๋ฆฌ์์ ๋ด๋ถ ๋ฐ์ดํฐ๋ฅผ pickle๋ก ์ง๋ ฌํSerializeํจ.
- Parquet : ๋์ฉ๋ ๋ฐ์ดํฐ ์ ์ฅ์์ ํ์ค
- ๊ต์ฅํ ๊ฐ๋ณ๊ณ , ๋น ๋ฅด๋ฉฐ ๋ค์์ OLAB Database๊ฐ ๋ด๋ถ์ ์ผ๋ก parquet๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํจ.
I/O(Input & Output) : ๋ฐ์ดํฐ ์ ์ถ๋ ฅ
- ์ ์ฒ๋ฆฌ์์ ์ ๋๋ค๊ฐ ์ ์ฅ์ ๋ฐ์ดํฐ๊ฐ ํฐ์ง ์ ์์
- ๊ฐ์ฅ ๋น ๋ฅธ ๋ฐ์ดํฐ ์๊ธ์ ๋ฉ๋ชจ๋ฆฌ(Network < Disk < Memory) → In-memory DB๋ฅผ ์ฌ์ฉ
- ์คํํฌ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ Memory์์ ์ฒ๋ฆฌ
ํด๋ผ์ฐ๋
3๋ ํด๋ผ์ฐ๋ ํ๋ซํผ
- AWS : ์์ฅ์์ ์ง๋ฐฐ์ ์ธ ์์น์ ์์.
- GCP : Bigquery์์๋ง ์ฌ์ฉ. ๊ทธ๋ฌ๋, ํธํ์ด ๋งค์ฐ ์ข์.
- Azure : ํธ๋ฆฌํ์ง๋ง ๋น์
๋ฐ์ดํฐ๋ฒ ์ด์ค
๐ก ๋ฐ์ดํฐ ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ๋ ์ด์
- ๋ฐ์ดํฐ ๊ณต์ : ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์ฌ๋ฌ ์ฌ์ฉ์๊ฐ ๋์์ ์ ๊ทผํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๊ณต์ ํ ์ ์์.
- ๋ฐ์ดํฐ ๋ณดํธ: ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๋ฐ์ดํฐ๋ฅผ ๋ณดํธํ๊ธฐ ์ํด ๋ค์ํ ๋ณด์ ๊ธฐ๋ฅ์ ์ ๊ณต.
- ๋ฐ์ดํฐ ๊ฒ์: ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ฒ ๊ฒ์ํ ์ ์๋๋ก ์ธ๋ฑ์ฑ ๊ธฐ๋ฅ์ ์ ๊ณต.
- ๋ฐ์ดํฐ ๋ฐฑ์ ๊ณผ ๋ณต์: ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๋ฐ์ดํฐ๋ฅผ ๋ฐฑ์ ํ๊ณ ๋ณต์ํ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ฌ ๋ฐ์ดํฐ ์์ค์ ๋ฐฉ์ง. ์ด๋ฅผ ํตํด ์ค์ํ ๋ฐ์ดํฐ๋ฅผ ์์ ํ๊ฒ ๋ณดํธํ ์ ์์.
- RDS: ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค
- postgres์ mysql ๋ฑ ๋ค์ํ ์ต์ ์ด ์์.
- ์ธ๋ฑ์ฑ์ ์ ํ์ฉํ๋ฉด ์ข์.
- ํญ์ ์๋ฒ๊ฐ ๋ ์์ด์ผ ํ๋ฉฐ, ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๊ทธ ๋น์ฉ์ด ๋๊ฐ.
- Athena: S3์ ์๋ ๋ฐ์ดํฐ๋ฅผ ์ง์ ๊ฐํธํ๊ฒ ๋ถ์ํ ์ ์๋ ๋ํํ ์ฟผ๋ฆฌ ์๋น์ค
- ๋ณดํต S3์ ์๋ ๋ฐ์ดํฐ์ ์ฐ๋
- Serverless๋ผ๊ณ ํ์ฌ, ์ฟผ๋ฆฌ๋ฅผ ์ด์ฉํ ๋๋ง ์ ์ ๊ธฐ๊ธฐ๋ฅผ ๋น๋ ค ์ฐ์ฐํ ๋ค ๋ค์ ๋ฐ๋ฉ. ๋ฐ๋ผ์ ๋ณดํต ๋น์ฉ์ด ์ ๋ ด
- ๋ฐ๋ก Spark์ ์ฐ๋ํ ์๋ ์์.
- Redshift: ๋น ๋ฅด๊ณ ๊ฐ๋ ฅํ ๋ฐ์ดํฐ ์จ์ดํ์ฐ์ง
- ๊ตฌ๋์ ์ํด์๋ ํด๋ฌ์คํฐ(์ฌ๋ฌ ๋์ ์ปดํจํฐ)๋ฅผ ๊ตฌ์ฑํ์ฌ ์ด์ํด์ผ ํจ. → ๋น์.
- ๋ณต์กํ ์ฐ์ฐ์ ์กฐ๊ธ ๋ ํจ์จ์
- ์คํํฌ์ ์ฐ๋ ๊ฐ๋ฅ
'๐ Today I Learn > ๐ Python' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Spark๋ฅผ ์ด์ฉํ ๋น ๋ฐ์ดํฐ ๋ถ์ (3) (0) | 2024.07.19 |
---|---|
Spark๋ฅผ ์ด์ฉํ ๋น ๋ฐ์ดํฐ ๋ถ์ (2) (0) | 2024.07.17 |
๋จธ์ ๋ฌ๋ ํน๊ฐ #3 ๊ตฐ์งํ(Clustering) (0) | 2024.06.15 |
๋จธ์ ๋ฌ๋ ํน๊ฐ #2 ํ๊ท(Regression) (0) | 2024.06.15 |
[๊ฐ์ธ ๊ณผ์ ] ๋จธ์ ๋ฌ๋ ๊ฐ์ธ๊ณผ์ (1) | 2024.06.13 |