Spark содержит два разных типа общих переменных: один — широковещательные переменные, а второй — аккумуляторы .
-
Широковещательные переменные — используются для эффективного распределения больших значений.
-
Аккумуляторы — используются для сбора информации определенного сбора.
Широковещательные переменные — используются для эффективного распределения больших значений.
Аккумуляторы — используются для сбора информации определенного сбора.
Переменные трансляции
Широковещательные переменные позволяют программисту хранить переменную только для чтения в кэше на каждом компьютере, а не отправлять ее копию с задачами. Их можно использовать, например, для эффективного предоставления каждому узлу копии большого входного набора данных. Spark также пытается распределить переменные вещания, используя эффективные алгоритмы вещания, чтобы снизить стоимость связи.
Действия Spark выполняются через набор этапов, разделенных распределенными «случайными» операциями. Spark автоматически передает общие данные, необходимые для задач на каждом этапе.
Передаваемые таким образом данные кэшируются в сериализованной форме и десериализуются перед выполнением каждой задачи. Это означает, что явное создание широковещательных переменных полезно только тогда, когда для задач на нескольких этапах требуются одни и те же данные или когда важно кэширование данных в десериализованной форме.
Переменные широковещания создаются из переменной v с помощью вызова SparkContext.broadcast (v) . Переменная широковещания является оберткой вокруг v , и к ее значению можно обратиться, вызвав метод value . Код, приведенный ниже, показывает это —
scala> val broadcastVar = sc.broadcast(Array(1, 2, 3))
Выход —
broadcastVar: org.apache.spark.broadcast.Broadcast[Array[Int]] = Broadcast(0)
После создания широковещательной переменной ее следует использовать вместо значения v в любых функциях, выполняемых в кластере, чтобы v не отправлялось на узлы более одного раза. Кроме того, объект v не должен изменяться после его широковещания, чтобы гарантировать, что все узлы получают одинаковое значение широковещательной переменной.
Аккумуляторы
Аккумуляторы — это переменные, которые «добавляются» только через ассоциативную операцию и поэтому могут эффективно поддерживаться параллельно. Их можно использовать для реализации счетчиков (как в MapReduce) или сумм. Spark изначально поддерживает аккумуляторы числовых типов, и программисты могут добавлять поддержку новых типов. Если аккумуляторы созданы с именем, они будут отображаться в пользовательском интерфейсе Spark . Это может быть полезно для понимания хода выполнения этапов (ПРИМЕЧАНИЕ. Это еще не поддерживается в Python).
Аккумулятор создается из начального значения v путем вызова SparkContext.accumulator (v) . Задачи, работающие в кластере, могут затем добавить его, используя метод add или оператор + = (в Scala и Python). Тем не менее, они не могут прочитать его значение. Только программа драйвера может прочитать значение аккумулятора, используя метод его значения .
Код, приведенный ниже, показывает аккумулятор, который используется для сложения элементов массива —
scala> val accum = sc.accumulator(0) scala> sc.parallelize(Array(1, 2, 3, 4)).foreach(x => accum += x)
Если вы хотите увидеть вывод кода выше, используйте следующую команду —
scala> accum.value
Выход
res2: Int = 10
Числовые операции RDD
Spark позволяет выполнять различные операции с числовыми данными, используя один из предопределенных методов API. Числовые операции Spark реализованы с помощью потокового алгоритма, который позволяет строить модель по одному элементу за раз.
Эти операции вычисляются и возвращаются как объект StatusCounter путем вызова метода status () .
Ниже приведен список числовых методов, доступных в StatusCounter .
S.No | Методы и смысл |
---|---|
1 |
кол — () Количество элементов в СДР. |
2 |
Имею в виду() Среднее количество элементов в СДР. |
3 |
Sum () Общая стоимость элементов в СДР. |
4 |
Максимум() Максимальное значение среди всех элементов в СДР. |
5 |
Min () Минимальное значение среди всех элементов в СДР. |
6 |
Дисперсия () Дисперсия элементов. |
7 |
STDEV () Стандартное отклонение. |
кол — ()
Количество элементов в СДР.
Имею в виду()
Среднее количество элементов в СДР.
Sum ()
Общая стоимость элементов в СДР.
Максимум()
Максимальное значение среди всех элементов в СДР.
Min ()
Минимальное значение среди всех элементов в СДР.
Дисперсия ()
Дисперсия элементов.
STDEV ()
Стандартное отклонение.
Если вы хотите использовать только один из этих методов, вы можете вызвать соответствующий метод непосредственно в RDD.