๐ ํด๋น ํฌ์คํ ์ ์คํํฌ ์๋ฒฝ ๊ฐ์ด๋ ์ฑ ๊ณผ ์ธํ๋ฐ์ ์คํํฌ ๋จธ์ ๋ฌ๋ ์๋ฒฝ ๊ฐ์ด๋ ๊ฐ์๋ก ๊ณต๋ถํ ํ ๋ฐฐ์ด ๋ด์ฉ์ ์ ๋ง์ ๋ฐฉ์์ผ๋ก ์ฌ๊ตฌ์ฑํ ๊ฒ์์ ์๋ฆฝ๋๋ค. ํนํ, ์ฐธ๊ณ ํ ์ธํ๋ฐ ๊ฐ์์ ๊ฐ์ ์๋ฃ๋ฅผ ๊ทธ๋๋ก ์ฌ์ฉํ์ง ์์์์ ํํ ์๋ฆฝ๋๋ค!
์ด๋ฒ ํฌ์คํ ์์๋ PySpark๋ฅผ ํ์ฉํด์ ๊ฐ๋จํ ๋จธ์ ๋ฌ๋ ๋ถ๋ฅ ๋ชจ๋ธ์ ๋ง๋ค์ด๋ณด๋๋ก ํ์. ๊ทธ๋ฆฌ๊ณ ๋ถ๋ฅ ๋ชจ๋ธ์ ๋ง๋๋ ๋ฐ ๊ฑฐ์น๋ ์ฌ๋ฌ๊ฐ์ง ๊ณผ์ ์ ํ๋์ ํ์ดํ๋ผ์ธ์ผ๋ก ๋ง๋ค ์ ์๋ PySpark์ Pipeline์ ํ์ฉํด๋ณด๋ ๋ฐฉ๋ฒ๋ ์์๋ณด๋๋ก ํ์.
1. PySpark๋ก ๊ฐ๋จํ Multi-Class ๋ถ๋ฅ ๋ชจ๋ธ ๋ง๋ค๊ธฐ
ํด๋น ํฌ์คํ ์์๋ ๋ํ์ ์ธ ๋ฒค์น๋งํฌ ๋ฐ์ดํฐ์ธ IRIS(๋ถ๊ฝ) ๋ฐ์ดํฐ๋ฅผ ํ์ฉํ ๋ฉํฐ-ํด๋์ค ๋ถ๋ฅ ๋ชจ๋ธ์ ๋ง๋ค์ด๋ณด์. ์ฐ์ ์๋์ Scikit-learn ๋ชจ๋์ ํ์ฉํด์ ๋ถ๊ฝ ๋ฐ์ดํฐ๋ฅผ ๋ก๋ํ๊ณ ์คํํฌ ๋ฐ์ดํฐํ๋ ์์ผ๋ก ๋ณํ์ํค์.
from sklearn.datasets import load_iris
import pandas as pd
import numpy as np
iris = load_iris()
data = iris.data
label = iris.target
iris_df = pd.DataFrame(data, columns=iris.feature_names)
iris_df['target'] = label
spark_df = spark.createDataFrame(iris_df)
1-1. ๋ ๋ฆฝ๋ณ์๋ค์ ํ๋์ ๋ฒกํฐ๋ก, Feature Vectorization!
Feature Vectorization์ ์คํํฌ ๋ฐ์ดํฐํ๋ ์์ ์๋ ํ๋ ๋๋ ๋ ์ด์์ ๋ ๋ฆฝ๋ณ์(Feature)๋ค์ ํ๋์ ๋ฒกํฐ๋ก ๋ฌถ๋ ๊ฒ์ ์๋ฏธํ๋ค. ๊ทธ๋ฆผ์ผ๋ก ํ์ํ๋ฉด ์๋์ ๊ฐ๋ค.
์ ๊ทธ๋ฆผ์ ๋ณด๋ฉด Feature Vectorization ๊ณผ์ ์ด ์ด๋ค ๊ฒ์ ์๋ฏธํ๋์ง ์ดํดํ ์ ์์ ๊ฒ์ด๋ค. ์ ๊ณผ์ ์ ์คํํฌ๋ก ๊ตฌํํ๋ ค๋ฉด ์คํํฌ์ ML ๋ชจ๋์์ ์ ๊ณตํ๋ VectorAssembler
ํด๋์ค๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
from pyspark.ml.feature import VectorAssembler
# 1. Train/Test ๋ฐ์ดํฐ๋ก ๋ถํ
train_df, test_df = spark_df.randomSplit(weights=[0.8, 0.2], seed=42)
# 2. Feature Vector๋ก ๋ง๋ค๊ธฐ
ftr_columns = train_df.columns[:-1]
vec_assembler = VectorAssembler(inputCols=ftr_columns, outputCol='features')
train_ftr_vec = vec_assembler.transform(train_df)
test_ftr_vec = vec_assembler.transform(test_df) # ํ
์คํธ ๋ฐ์ดํฐ์ ๋ํด๋ ๋์ผํ ๊ฐ์ฒด ์ฌ์ฉ
print('# ํ์ต ์๋ณธ ๋ฐ์ดํฐ:')
train_df.limit(5).show()
print('# Feature Vectorization ํ ํ์ต ๋ฐ์ดํฐ:')
train_ftr_vec.limit(5).show()
VectorAssembler
ํด๋์ค๋ฅผ ์ฌ์ฉํ ๋๋ inputCols
์ธ์์ ๋
๋ฆฝ๋ณ์๋ค ์นผ๋ผ ์ด๋ฆ๋ค์ ๋ฆฌ์คํธ ํํ๋ก ๋ฃ์ด์ฃผ๋ฉด ๋๋ค. outputCol
์๋ ๋
๋ฆฝ๋ณ์๋ค์ ํ๋์ ๋ฒกํฐํ ์ฆ, Feature Vectorization ์์ผฐ์ ๋ ๋ง๋ค์ด์ง ํ๋์ ์นผ๋ผ์ ๋ํด ๋ช
์ํด์ค ์นผ๋ผ ์ด๋ฆ์ด๋ค.
์ ์ฝ๋์์๋ 'features' ๋ผ๋ ๋ฌธ์์ด๋ก ๋ช
์ํด์ฃผ์๋๋ฐ, ์๋ ์ฝ๋ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ฉด features
๋ผ๋ ์๋ก์ด ์นผ๋ผ์ด ์๊ธด ๊ฒ์ ์ ์ ์๋ค. ์ด๋ ๊ฒ ํ๋์ VectorAssembler
๊ฐ์ฒด๋ฅผ ์์ฑํด์ค ํ, ํ์ต ๋ฐ์ดํฐ์ ๋ํด transform
๋ฉ์๋๋ก ์ค์ง์ ์ธ Feature Vectorization์ ์ํํด์ฃผ๋ฉด ๋๋ค.
๋จ, ๊ฒ์ฆ(๋๋ ํ
์คํธ) ๋ฐ์ดํฐ์ ๋ํด์๋ Feature Vectorization์ ์ ์ฉํด์ค ๋ ํ์ต ๋ฐ์ดํฐ์ ์ ์ฉํ ๋ ๋ง๋ ๋์ผํ VectorAssembler
๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค.
์ ์ฝ๋ ๊ฒฐ๊ณผ์ธ ๋ VectorAssembler
์ ์ฉ ์ /ํ ๋ฐ์ดํฐํ๋ ์์ ๊ฒฐ๊ณผ ์ฐจ์ด๋ ์๋์ ๊ฐ๋ค.
1-2. ๋ฉํฐ-ํด๋์ค ๋ถ๋ฅ ๋ชจ๋ธ๋ก ํ์ต, ์์ธกํ๊ธฐ
ํด๋น ์์์์๋ ์ฌ์ฉํ ๋ถ๋ฅ ๋ชจ๋ธ๋ก์ ์์ฌ๊ฒฐ์ ๋๋ฌด(Decision Tree)๋ฅผ ์ฌ์ฉํ๊ธฐ๋ก ํ์. ์ฌ์ดํท๋ฐ ๋์ ๋น์ทํ API ์ด์ง๋ง ์ฐจ์ด์ ์ด ์ด๋์ ๋ ์๋ค. ๋จผ์ ์๋์ ์ฝ๋๋ฅผ ์ํํด์ ๋ชจ๋ธ์ ์ ์ํ๊ณ ํ์ต ๋ฐ์ดํฐ์ ๋ํด ๋ชจ๋ธ์ ํ์ต์ํค๊ณ ์์ธกํ๋ ์ฝ๋๋ฅผ ์ดํด๋ณด์.
from pyspark.ml.classification import DecisionTreeClassifier
# ๋ชจ๋ธ ์ ์
dt_clf = DecisionTreeClassifier(featuresCol='features', labelCol='target', maxDepth=10)
# ํ์ต
dt_model = dt_clf.fit(train_ftr_vec)
# ํ์ต, ํ
์คํธ ๋ฐ์ดํฐ์ ๋ํด ์์ธก
train_pred = dt_model.transform(train_ftr_vec)
test_pred = dt_model.transform(test_ftr_vec)
๋จผ์ ๋ชจ๋ธ์ ์ ์ํ ๋, ์ฌ์ฉํ ๋ชจ๋ธ์ ํด๋์ค๋ฅผ ์ฌ์ฉํด์ featuresCol ์๋ [1-1. ๋ชฉ์ฐจ]์์ ๋ง๋ Feature Vector์ ์นผ๋ผ ์ด๋ฆ์ ๋ช
์ํด์ค๋ค. ๊ทธ๋ฆฌ๊ณ labelCols
์ธ์์๋ ์ฐ๋ฆฌ๊ฐ ์์ธกํ๋ ค๋ '์ ๋ต' ์ฆ, ์ข
์๋ณ์ ์นผ๋ผ์ ์ด๋ฆ์ ๋ช
์ํด์ค๋ค. ๊ทธ๋ฆฌ๊ณ ์ถ๊ฐ์ ์ผ๋ก ์ฌ์ฉํ๋ ค๋ ๋จธ์ ๋ฌ๋ ๋ชจ๋ธ์ ํ์ดํผํ๋ผ๋ฏธํฐ ์ธ์๋ฅผ ์ถ๊ฐํด์ค๋ค. ์ฌ๊ธฐ์๋ maxDepth
๋ผ๋ Decision Tree ๋ชจ๋ธ์ ํ์ดํผํ๋ผ๋ฏธํฐ๋ฅผ ๋ช
์ํ๋ค.
๊ทธ๋ฆฌ๊ณ ํ์ต ์, Feature Vectorization ์์ผ์ค ๋ฐ์ดํฐํ๋ ์์ fit()
๋ฉ์๋์ ๋ฃ์ด์ค๋ค. ์ด ๋, fit()
๋ฉ์๋๋ฅผ ํธ์ถํ ์, Model ํด๋์ค ๊ฐ์ฒด๊ฐ ๋ฐํ๋๋ค. ์ด๊ฒ์ด ์๋ง ์ฌ์ดํท๋ฐ๊ณผ์ ๊ฐ์ฅ API ์ ์ฐจ์ด์ ์ด๋ผ๊ณ ํ ์ ์๊ฒ ๋ค.
๊ทธ๋ฆฌ๊ณ ํ์ต, ํ
์คํธ ๋ฐ์ดํฐ์ ๋ํด ๋ชจ๋ธ์ ์์ธก๊ฐ์ ๋ด๋ฑ๊ธฐ ์ํด์๋ fit()
๋ฉ์๋๋ก ๋ฐํ๋ Model ํด๋์ค ๊ฐ์ฒด์์ transform()
์ด๋ผ๋ ๋ฉ์๋๋ฅผ ํ์ฉํ๋ค. transform()
๋ฉ์๋ ์ธ์์๋ ์์ธกํ๋ ค๋ Feature Vectorization์ด ์ ์ฉ๋ ๋ฐ์ดํฐํ๋ ์์ ๋ฃ์ด์ฃผ๋ฉด ๋๋ค. ์ด๋ ๊ฒ ์์ธกํจ์ผ๋ก์จ ๋ฐํ๋ ๊ฐ์ฒด๋ค(์ ์ฝ๋ ์์์๋ train_pred
, test_pred
๋ณ์)์ ์คํํฌ์ ๋ฐ์ดํฐํ๋ ์ ๊ฐ์ฒด๋ก ์ด๊ฒ๋ค์ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํด๋ณด๋ฉด ์๋ ์ฌ์ง์ฒ๋ผ ์ฌ๋ฌ๊ฐ์ง ์นผ๋ผ๋ค์ด ์๋ ๊ฒ์ ์ ์ ์๋ค.
์ ์ฌ์ง์ ๋ณด๋ฉด ์๋ค์ํผ ์๋ณธ Feature, Feature Vectorization๋ ๊ฒ, ๋ชจ๋ธ์ด ์์ธกํ Rawํ ๊ฒฐ๊ณผ๊ฐ, ๊ทธ๋ฆฌ๊ณ Rawํ ๊ฒฐ๊ณผ๊ฐ์ ํ์ฑํจ์๋ฅผ ์ ์ฉํด ๋ฐํ๋ ํ๋ฅ ๊ฐ, ์ต์ข
์์ธก๊ฐ๊น์ง ๋ด๊ฒจ์๋ ๊ฒ์ ๋ณผ ์ ์๋ค. ์ฐ๋ฆฌ๋ ๋ฐ์์ ๋ชจ๋ธ ์ฑ๋ฅ์ ํ๊ฐํ๊ธฐ ์ํด์ prediction
์ด๋ผ๋ ์นผ๋ผ์ ์๋ ๊ฐ๋ค์ ํ์ฉํ๋ฉด ๋๋ค.
1-3. ๋ชจ๋ธ์ ์ฑ๋ฅ ํ๊ฐํ๊ธฐ
ํด๋น ์์์์ ํด๊ฒฐํ๋ ค๋ ๋ฌธ์ ๋ ๋ฉํฐ-ํด๋์ค ๋ถ๋ฅ ๋ฌธ์ ์ด๊ธฐ ๋๋ฌธ์ ์ด์ ๋ง๋ Evaluator
ํด๋์ค๋ฅผ ํ์ฉํด์ผ ํ๋ค.
from pyspark.ml.evaluation import MulticlassClassificationEvaluator
evaluator = MulticlassClassificationEvaluator(predictionCol='prediction', labelCol='target', metricName='accuracy')
train_acc = evaluator.evaluate(train_pred)
test_acc = evaluator.evaluate(test_pred)
print('Train Accuracy:', train_acc)
print('Test Accuracy:', test_acc)
์ฐธ๊ณ ๋ก ์คํํฌ์๋ ๋ฉํฐ-ํด๋์ค๊ฐ ์๋ ๋ฉํฐ-๋ ์ด๋ธ ๋ฌธ์ ์ ๋ํด ๋ค๋ฃจ๋ MultilabelClassificationEvaluator
๋ ์กด์ฌํ๋ค. ๋ฉํฐ-ํด๋์ค, ๋ฉํฐ-๋ ์ด๋ธ์ ์ฐจ์ด์ ์ ๋ฌด์์ธ์ง ์์ ํฌ์คํ
์์๋ ์ธ๊ธํ์๋ค. ํด๋์ค๊ฐ ์ฌ๋ฌ๊ฐ์ธ ๊ฒ ์ค ๋ฌด์กฐ๊ฑด ํ๋๋ง์ ๊ฐ์ ธ์ผ ํ๋ค๋ฉด ๋ฉํฐ-ํด๋์ค, ๋์์ ์ฌ๋ฌ๊ฐ์ ํด๋์ค๋ฅผ ๊ฐ์ ธ๋ ๋๋ค๋ฉด ๋ฉํฐ-๋ ์ด๋ธ์ด๋ค.
2. Pipeline์ ํ์ฉํด ์ ์ฒ๋ฆฌ, ๋ชจ๋ธ๋ง ๊ณผ์ ์ ๊ฐ์ํ์ํค์!
๋ค์์ ์คํํฌ์์ ์ ๊ณตํ๋ Pipeline
์ด๋ผ๋ ํด๋์ค๋ฅผ ํ์ฉํด์ ๋ฐ์ดํฐ ์ ์ฒ๋ฆฌ, Feature Vectorization, ๋ชจ๋ธ๋ง ๊ณผ์ ์ ๊ฐ์ํ์ํฌ ์ ์๋ ๋ฐฉ๋ฒ์ ๋ํด ๋ฐฐ์๋ณด์. ์ฌ์ดํท๋ฐ๋ Pipeline์ด๋ผ๋ ํด๋์ค๋ฅผ ํ์ฉํ ์ ์๋๋ฐ, ์์ ์ ์ฌ์ฉํ๋ฉด์ ํธ๋ฆฌํ๋ ๊ฒฝํ์ด ์๋ค. ์ด๋ฌํ ๊ฒฝํ์ ์คํํฌ์์๋ ํ ์ ์๋ค!
๋จผ์ ์คํํฌ ๋ฐ์ดํฐํ๋ ์์ Train, Test ์ฉ ๋ฐ์ดํฐ๋ก ๋ถํ ํ๊ณ Feature Vectorization์ ์ํํ๋ VectorAssembler
๋ฅผ ํ๋์ ๋จ๊ณ(stage)๋ก ์ ์ํ๊ณ , ๋ ํ๋๋ ๋ชจ๋ธ์ ์ ์ํจ์ผ๋ก์จ ๋๋ค๋ฅธ ๋จ๊ณ(stage)๋ฅผ ์ ์ํด๋ณด์.
from pyspark.ml.feature import VectorAssembler
from pyspark.ml.classification import DecisionTreeClassifier
# 1. ๋ฐ์ดํฐ ๋ถํ
train_df, test_df = spark_df.randomSplit(weights=[0.8, 0.2], seed=42)
# 2. Feature Vector ๋ฐ์ดํฐํ๋ ์์ผ๋ก ๋ณํํ๋ ์คํ
์ด์ง ์์ฑ
ftr_columns = train_df.columns[:-1]
stage_1 = VectorAssembler(inputCols=ftr_columns, outputCol='features')
# 3. ๋ชจ๋ธ ์ ์๋ฅผ ํ๋์ ์คํ
์ด์ง๋ก ์์ฑ
stage_2 = DecisionTreeClassifier(featuresCol='features',
labelCol='target')
์ด์ ์คํํฌ์์ ์ ๊ณตํ๋ Pipeline
ํด๋์ค๋ฅผ ํ์ฉํด์ ์์์ ๋ง๋ stage๋ค์ ํ๋์ ํ์ดํ๋ผ์ธ์ผ๋ก ์ ์ํด ํ๊บผ๋ฒ์ ์คํํ ์ ์๋๋ก ๋ง๋ค์ด๋ณด์.
from pyspark.ml import Pipeline
# 4. ๋ ์คํ
์ด์ง๋ฅผ ํ๋์ ํ์ดํ๋ผ์ธ์ผ๋ก ๋ง๋ค๊ธฐ
pipeline = Pipeline(stages=[stage_1, stage_2])
# 5. ํ์ดํ๋ผ์ธ์ fit ํ๋ฉด ๊ฐ ์คํ
์ด์ง์์ transform ๋๋ fit ๋ฉ์๋๋ฅผ ํ์ต ๋ฐ์ดํฐ์ ์ํ
pipeline_model = pipeline.fit(train_df)
# 6. 5๋ฒ ๋จ๊ณ๋ก ๋ง๋ ํ์ดํ๋ผ์ธ ๋ชจ๋ธ์ transform์ผ๋ก ํ์ต ๋ฐ ํ
์คํธ ๋ฐ์ดํฐ์ ์ํ
train_pred = pipeline_model.transform(train_df)
test_pred = pipeline_model.transform(test_df)
์ ์๋ ํ์ดํ๋ผ์ธ ๊ฐ์ฒด์์ fit()
๋ฉ์๋๋ฅผ ์ํํ๊ฒ ๋๋ฉด ์ ์ํ ๊ฐ stage๋ค, ์ฌ๊ธฐ์์๋ VectorAssembler
๊ฐ์ฒด์ transform()
๋ฉ์๋์ ๋ชจ๋ธ ๊ฐ์ฒด์์์ fit()
๋ฉ์๋๋ฅผ ์์ฐจ์ ์ผ๋ก ์๋์ผ๋ก ์คํ์์ผ์ค๋ค. ์ฆ, ํ์ต ๋ฐ์ดํฐ์ ๋ํด ๋ฐ์ดํฐ ์ ์ฒ๋ฆฌ, ๋ชจ๋ธ ํ์ต์ด ์ํ๋๋ ๊ฒ์ด๋ค.
ํท๊ฐ๋ฆฌ์ง ๋ง์์ผ ํ ์ ์ ํ์ดํ๋ผ์ธ ๊ฐ์ฒด์์๋ fit()
๋ฉ์๋๋ฅผ ์ํํ๋๊น 'fit' ์ด๋ผ๋ ๋ฉ์๋ ์ด๋ฆ ์์ฒด๋ง ๋ณด๊ณ "์ VectorAssembler
๊ฐ์ฒด์์๋ transform()
์ ์ํํ์ง?" ๋ผ๊ณ ์๊ฐํ ์ ์๋ค. ํ์ง๋ง ์คํํฌ๋ฅผ ์ ์ํ ๊ฐ๋ฐ์ ๋ถ๋ค์ด ํ์ดํ๋ผ์ธ ๊ฐ์ฒด์ fit()
๋ฉ์๋๋ฅผ ์ํํ๋ฉด VectorAssembler
๊ฐ์ฒด์์๋ fit()
์ด ์๋ transform()
๋ฉ์๋๋ฅผ ์ํํ ์ ์๋๋ก ๋ก์ง์ ์์ฑํด ๋์๋ค.(์ฐธ๊ณ ๋ก VectorAssembler
์๋ fit()
๋ฉ์๋ ์์ฒด๊ฐ ์กด์ฌํ์ง ์๋ค๋ ์ ๋ ์๋ค)
์ด๋ ๊ฒ ํ์ดํ๋ผ์ธ ๊ฐ์ฒด์์ fit()
๋ฉ์๋๋ก ํ์ดํ๋ผ์ธ ๋ชจ๋ธ ๊ฐ์ฒด๋ฅผ ๋ฐํ๋ฐ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ ํ, ํ์ดํ๋ผ์ธ ๋ชจ๋ธ ๊ฐ์ฒด์์ transform()
๋ฉ์๋๋ฅผ ํ์ฉํด ํ
์คํธ ๋ฐ์ดํฐ์ ๋ํด ์์ธก์ ์ํํ ์ ์๋ค. ์ด๋ ๊ฒ ๋ฐํ๋ ํ์ต, ํ
์คํธ ๋ฐ์ดํฐ์ ๋ํ ์์ธก๊ฐ ๊ฒฐ๊ณผ ํ๋ฉด์ ์๋์ ๊ฐ๋ค.
์ด๋ ๊ฒ ํ์ดํ๋ผ์ธ์ ํ์ฉํด์ ์ฝ๊ฒ ๋ฐ์ดํฐ ์ ์ฒ๋ฆฌ ๋ฐ ๋ชจ๋ธ ํ์ต, ์์ธกํ๋ ๊ณผ์ ์ ํ๋์ ๊ณผ์ ์ผ๋ก ๊ฐ๊ฒฐํ๊ฒ ์ฒ๋ฆฌํ ์ ์๋ค. ๋ฌผ๋ก ํด๋น ์์์์๋ ์ค์ผ์ผ๋ง์ด๋ ๋ฒ์ฃผํ ๋ณ์์ ๋ํ ๋ ์ด๋ธ ๋๋ ์-ํซ ์ธ์ฝ๋ฉ ๊ณผ์ ์ด ์กด์ฌํ์ง๋ ์์ง๋ง, ๋ง์ฝ ์ด๋ฌํ ์ ์ฒ๋ฆฌ ๊ณผ์ ์ด ์ถ๊ฐ๋ก ํ์ํ๋ค๋ฉด ์์์ ํ๋ ๊ฒ์ฒ๋ผ ์ ์ฒ๋ฆฌ ์์๋๋ก stage๋ค์ ์ ์ํด์ฃผ๊ณ ์์์ ๋ง๊ฒ ๋ฆฌ์คํธ ํํ๋ก ์ ์ํ ํ ํ์ดํ๋ผ์ธ ๊ฐ์ฒด๋ก ๋ง๋ค์ด์ฃผ๋ฉด ๋๋ค.
์ฐธ๊ณ ๋ก ํ์ดํ๋ผ์ธ ๋ชจ๋ธ ๊ฐ์ฒด๋ฅผ dir()
๋งค์ง ๋ฉ์๋๋ก ์ด๋ค ์์ฑ๊ฐ๋ค์ด ์๋์ง ์ดํด๋ณด๋ฉด ์ฌ๋ฌ๊ฐ์ง ์์ฑ๊ฐ๋ค์ด ์๋ ๊ฒ์ ์ ์ ์๋ค. ๊ทธ ์ค์ stages๋ผ๋ ์์ฑ ๊ฐ์ด ์๋์ฒ๋ผ ์๋๋ฐ, ์ด ์์ฑ ๊ฐ์ ํตํด์ ์ํ๋ ํน์ ๋จ๊ณ๋ฅผ ๋ฐ๋ก ์ถ์ถํด์ ํ์ฉํ ์๋ ์๋ค.
'Apache Spark' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[PySpark] Spark๋ก Encoding ๊ณผ Scaling ์ ์ํํด๋ณด์! (0) | 2022.03.07 |
---|---|
[PySpark] Spark๋ก ๊ต์ฐจ๊ฒ์ฆ, ํ๋ผ๋ฏธํฐ ํ๋์ ํด๋ณด์! (0) | 2022.03.06 |
[PySpark] Spark์ Dataframe API๋ฅผ ์์๋ณด์!(2) (0) | 2022.02.05 |
[PySpark] Spark์ Dataframe API๋ฅผ ์์๋ณด์!(1) (4) | 2022.02.03 |
[Infra] ๋ฐ์ดํฐ ์ธํ๋ผ - Ingestion&Transformation(Event Streaming) (0) | 2021.04.25 |