Возможно, самым простым решением является использование аргумента 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 и правильную установку. Таким образом, вы можете легко отслеживать, что установлено, удалять ненужные пакеты и избегать проблем с отладки.
http.get
является асинхронным и выполняет обработчики событий при возникновении событий. Когда вы вызываете getter()
, эта функция немедленно возвращается, т. Е. Не дожидаются события и выполняется следующий оператор console.log(a)
.
Кроме того, js является однопоточным, а текущий стек выполнения никогда не выполняется прерывается для любого другого события / обратного вызова или вообще. Таким образом, обработчики событий могут запускаться только в том случае, если текущее выполнение заканчивается, т. Е. Содержит noch больше операторов. Таким образом, ваш console.log()
всегда будет выполняться перед любым обработчиком событий запроса, таким образом a
все еще не определено.
Если вы хотите продолжить работу после завершения запроса, вы должны сделать это с помощью обработчика событий .
См. эту отличную презентацию для более подробной информации https://youtu.be/8aGhZQkoFbQ