Я знаю, что он использует pickle и отправляет вещи по узлам, хранит в памяти и так далее. что меня смущает, так это то, почему синтаксис его использования в pyspark работает.
def main():
sc = SparkContext()
someValue = rand()
V = sc.broadcast(someValue)
A = sc.parallelize().map(worker)
def worker(element):
element *= V.value
Почему приведенный выше код не получает неопределенную жалобу «V»? Я искал исходный код, связанный с трансляцией, в pyspark, но ничего не понял.
2 ответа
Я считаю, что ваша проблема - это просто проблема с областью действия Python. Если вы попробуете следующий код Python, отличный от Spark, он также выдаст ошибку «V» не определен:
def runner(func):
func()
def main():
V = 22
A = runner(worker)
def worker():
print V
if __name__ == '__main__':
main()
Одно исправление заключается в том, что вы можете переместить worker()
внутрь main()
(или, альтернативно, сделать V
глобальной переменной):
def main():
sc = SparkContext()
someValue = rand()
V = sc.broadcast(someValue)
def worker(element):
element *= V.value
A = sc.parallelize().map(worker)
Из научных статей Spark Spark: кластерные вычисления с рабочими наборами Матей Захария, Мошараф Чоудхури, Майкл Дж. Франклин, Скотт Шенкер, Ион Стойка. HotCloud 2010. Июнь 2010.
Общие переменные: два типа общих переменных в Spark, широковещательные переменные и аккумуляторы, реализуются с использованием классов с пользовательскими форматами сериализации. Когда кто-то создает широковещательную переменную b со значением v, v сохраняется в файл в общей файловой системе. Сериализованная форма b — это путь к этому файлу. Когда значение b запрашивается на рабочем узле, Spark сначала проверяет, находится ли v в локальном кеше, и считывает его из файловой системы, если это не так. Первоначально мы использовали HDFS для трансляции переменных, но мы разрабатываем более эффективную систему потокового вещания.
Похожие вопросы
Связанные вопросы
Новые вопросы
python
Python — это мультипарадигмальный многоцелевой язык программирования с динамической типизацией. Он предназначен для быстрого изучения, понимания и использования, а также обеспечивает чистый и унифицированный синтаксис. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Если у вас есть вопросы о версии Python, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas, NumPy) укажите это в тегах.