#python-3.x #apache-spark #pyspark
Вопрос:
Я использую кластер Искр с pyspark
роем докеров с тремя рабочими. Один рабочий находится на той же машине, что и мастер, а два других находятся на других машинах. Я использую sparkContext.addPyFile(file)
для добавления файла python и запуска функций из него.
app.py:
from pyspark import SparkContext
from pyspark.sql import SparkSession
SparkContext.setSystemProperty('spark.executor.memory', '20g')
sc = SparkSession
.builder
.appName('test2')
.getOrCreate()
sc.sparkContext.addPyFile('test.py')
import test
train = test.build_model('file.csv')
Упрощенный model.py:
import pandas as pd
from sklearn import ensemble
from sklearn.feature_extraction.text import CountVectorizer
def build_model(file):
df = pd.read_csv(file)
encoder = preprocessing.LabelEncoder()
y = encoder.fit_transform(df['y'])
count_vect = CountVectorizer(analyzer='word')
x = count_vect.fit_transform(df['x'])
model = ensemble.RandomForestClassifier(n_estimators=10, verbose=10, n_jobs=1, max_depth=1000)
model.fit(x, y)
Это основной пользовательский интерфейс Spark в порту 8080, когда я запускаю контейнер с app.py:
Это пользовательский интерфейс в порту 4040:
Это htop
результат работы главной машины Spark: как мы видим, используется память.
Однако результат работы htop
на двух других рабочих машинах не показывает использования памяти. Это наводит меня на мысль, что два других работника не используются, хотя они выглядят так, как будто они используются в пользовательском интерфейсе Spark Master.
Почему это происходит? Это потому, что я использую чистый код Python, а не sc.parallelize()
функцию из pyspark?