Единичное тестирование PySpark UDF [дубликат]

Я, наконец, понял это. Когда вы используете Eclipse и экспортируете файл runnable jar, убедитесь, что вы выбрали в разделе «Обработка библиотеки»:

Extract required libraries into generated JAR

Это устранит эту проблему и, возможно, многие другие.

16
задан user3279453 27 June 2015 в 20:25
поделиться

2 ответа

Возможно, самым простым решением является использование аргумента pyFiles при создании SparkContext

from pyspark import SparkContext
sc = SparkContext(master, app_name, pyFiles=['/path/to/BoTree.py'])

. Каждый размещенный там файл будет отправлен рабочим и добавлен в PYTHONPATH.

Если вы работаете в интерактивном режиме, вы должны остановить существующий контекст, используя sc.stop(), прежде чем создавать новый.

Также убедитесь, что рабочий Spark фактически использует Anaconda, а не интерпретатор Python по умолчанию. Основываясь на вашем описании, это, скорее всего, проблема. Для установки PYSPARK_PYTHON вы можете использовать файлы conf/spark-env.sh.

На стороне копирования файла копирования на lib это довольно грязное решение. Если вы хотите избежать нажатия файлов с помощью pyFiles, я бы рекомендовал создать простой пакет Python или пакет Conda и правильную установку. Таким образом, вы можете легко отслеживать, что установлено, удалять ненужные пакеты и избегать проблем с отладки.

14
ответ дан zero323 16 August 2018 в 02:15
поделиться
  • 1
    Спасибо за это. Я использую python в интерактивном режиме, поэтому я не могу настроить SparkContext. Как сделать эквивалент pyFiles в этом случае? Я определил функцию, которая импортирует sys, а затем возвращает sys.executable. Я думаю, это говорит мне, что все мои рабы управляют Анакондой. Однако, если я вхожу в них, я вижу, что переменная среды PYSPARK_PYTHON не установлена. Как я могу редактировать PYTHONPATH на моих рабах? – user3279453 28 June 2015 в 10:51
  • 2
    Фактически вы можете создать SparkContext в интерактивном режиме. См. Обновленный ответ для некоторых деталей об этом и переменной PYSPARK_PYTHON – zero323 30 June 2015 в 18:36

После получения SparkContext можно также использовать addPyFile для последующего отправки модуля каждому работнику.

sc.addPyFile('/path/to/BoTree.py')

pyspark.SparkContext.addPyFile (путь) документации

11
ответ дан dmbaker 16 August 2018 в 02:15
поделиться
  • 1
    это потрясающе и именно то, что я искал ... ура. – tamale 23 March 2016 в 16:35
Другие вопросы по тегам:

Похожие вопросы: