Почему в Spark не используется память на двух рабочих узлах, даже если они отображаются как запущенные?

#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?