Почему Pyspark в Windows работает намного медленнее, чем в Linux?

#python #apache-spark #pyspark

#python #apache-spark #pyspark

Вопрос:

Хорошо, итак, я новичок в Apache Spark, и я попробовал запустить несколько базовых скриптов на Python, чтобы посмотреть, на что это похоже. Прямо сейчас я пытаюсь использовать следующий скрипт Python, который использует Pyspark для подсчета случаев, когда определенное слово (в данном примере слово «word») появляется в куче файлов Python в каталоге:

 from pyspark import SparkContext
import sys
import os

def get_files(path):
    ls = ''
    for i in os.walk(path):
        directory, ls_files = i[0], i[2]
        for file in ls_files:
            if file.endswith('.py') and not file.startswith('_'):
                path = os.path.join(directory, file)
                ls  = path
                ls  = ','
    return ls[0:-1]

if __name__ == '__main__':
    if len(sys.argv) != 2:
        print('This program only accpets one argument as input.')
    else:
        files = get_files(sys.argv[1])
        sc = SparkContext()
        num = sc.textFile(files).flatMap(lambda x: x.split(' ')).filter(lambda x: 'word' in x).count()
        print(f'********* 'word' appears {num} times')
  

Как вы можете видеть, я использую все параметры по умолчанию для SparkConf.

Что ж, если я попытаюсь запустить эту простую программу в Windows, передав в качестве аргумента папку размером около 10 МБ и 460 файлов .py, это займет около 3 минут. На том же компьютере я пытаюсь сделать то же самое, с той же папкой, используя Ubuntu, и это буквально занимает 3 секунды.

Как можно объяснить такую сильную разницу во времени? Я могу понять, что, возможно, некоторые из этих программ лучше разработаны для систем Unix, но, в конце концов, это один и тот же процессор, выполняющий несколько задач параллельно на всех 8 ядрах, поэтому для меня не имеет особого смысла, что он работает так медленно в Windows.

Комментарии:

1. Это не просто pyspark, python был (я не тестировал его в последнее время) также медленнее в Windows. Пару лет назад, когда я тестировал это, Python в подсистеме Windows Linux был намного быстрее, чем в родной Windows.

2. Как настроен кластер Spark, к которому вы подключаетесь? Имеет ли он одинаковую конфигурацию в обеих системах? Какие процессы занимают процессор в окне Windows при запуске этого?

3. @J’e Операции с файлами и создание процессов могут быть заметно медленнее в Windows, но я не думаю, что WSL Python намного быстрее, чем родной Windows Python, если я не вижу доказательств 🙂

4. @AKX, погугли! Я сказал, что это было пару лет назад. Возможно, это больше не проблема. reddit.com/r/Python/comments/6qndr6 /…

5. @ J’e Mm, достаточно справедливо — MSVC, не поддерживающий вычисляемые goto, вероятно, является виновником 🙂 Я полагаю, что все могло бы выровняться, если бы MSVC тем временем научился новым трюкам…