Я работаю над проектом, в котором мне нужно читать файлы S3 (каждый размером около 3 МБ в сжатом виде), используя boto3. У меня есть небольшой скрипт pyspark, который запускается каждый час, чтобы обработать файл и сгенерировать 2 типа выходных данных, которые записываются обратно в S3. Сценарий pyspark использует библиотеку xmltodict python для чтения некоторых данных stati c в объект словаря, необходимый для обработки файла. У меня небольшой кластер Amazon EMR v5.28, работающий с 1 Master и 1 Core. Это может быть чрезмерно, но сейчас я не беспокоюсь.
Вопросы: 1. Откуда я знаю, «ЕСЛИ» я должен разделить данные? Я прочитал статьи о том, сколько разделов создать, и т. Д. c, но не смог найти ничего по IF и WHEN. Какие критерии определяют разделение - количество строк, столбцов, тип данных, действия, выполняемые в сценарии и т. Д. c в файле исходных данных? Я читаю исходный файл в RDD и преобразовываю его в DF и выполняю различные операции, добавляя столбцы, группируя данные, считая данные и т. Д. c. Как искра управляет разделением за кулисами? 2. В настоящее время я вручную выполняю сценарий pyspark следующим образом:
spark-submit --master spark://x.x.x.x:7077 --deploy-mode client test.py
на главном узле, поскольку я решил придерживаться автономного CM. «Xmltodict» установлен на этом узле, но не установлен на базовом узле. Похоже, его не нужно устанавливать или даже python3 настраивать на базовом узле, поскольку я не вижу никаких ошибок. Это правильно и может кто-нибудь пролить свет на эту путаницу? Я пытался установить библиотеки python через файл оболочки как bootstrap, когда создавал кластер, но он не удался, и, откровенно говоря, после нескольких попыток я отказался. 3. На основании разбиения я думаю, что я немного запутался в том, использовать ли coalesce () или collect () или нет. Опять же, вопрос в том, когда использовать, а когда нет?
Извините, слишком много вопросов. Теперь, когда у меня написан сценарий pyspark, я пытаюсь повысить эффективность. Спасибо