Что такое команды Spark Shell?

Оболочка Spark - это интерфейс, используемый для написания специальных запросов для работы и понимания поведения Apache Spark. Он называется механизмом с открытым исходным кодом кластерных вычислений, который может выполнять обработку данных в памяти, например, для аналитики, ETL, машинного обучения для огромных массивов данных. В этой теме мы собираемся узнать о командах Spark Shell.

Существуют различные типы оболочки Spark для разных языков программирования, например:

  1. спарк-оболочка написана на Scala
  2. Pyspark находится в Python и
  3. sparkR для языка R

Можно разработать его автономное приложение с помощью Spark. Он широко используется из-за своей сверхбыстрой скорости вычислений. Это потому, что он использует MapReduce для обработки различных запросов и преобразований.

Для запуска команд spark-shell требуется, чтобы в системе уже были установлены Java и Scala.

Типы команд Spark Shell

Различные виды команд оболочки Spark:

1. Чтобы проверить, установлен ли Spark и узнать его версию, используется команда ниже (все команды в дальнейшем должны указываться, начиная с этого символа «$»)

$ spark-shell

Следующий вывод отображается, если искра установлена:

$ spark-shell

SPARK_MAJOR_VERSION установлен в 2, используя Spark2

Установка уровня журнала по умолчанию «WARN».

Чтобы настроить уровень ведения журнала, используйте sc.setLogLevel (newLevel). Для SparkR используйте setLogLevel (newLevel).

Веб-интерфейс Spark context доступен по адресу http://10.113.59.34:4040.

Контекст Spark доступен как 'sc' (master = local (*), app id = local-1568732886588).

Spark сессия доступна как «искра».

Добро пожаловать в

____ __

/ __ / __ ___ _____ / / __

_ \ \ / _ \ / _ `/ __ / '_ /

/ ___ / .__ / \ _, _ / _ / / _ / \ _ \ версия 2.2.0.2.6.3.0-235

/ _ /

Использование Scala версии 2.11.8 (Java HotSpot (TM) 64-битная виртуальная машина сервера, Java 1.8.0_112)

Введите выражения для их оценки.

Тип: помощь для получения дополнительной информации.

Скала>

2. Базовая структура данных Spark называется RDD (Resilient Distributed Datasets), которая содержит неизменную коллекцию объектов для распределенного вычисления записей. Все наборы данных RDD логически разделены между несколькими узлами кластера.

СДР может быть создан только путем чтения из локальной файловой системы или путем преобразования существующего СДР.

а) Для создания нового СДР мы используем следующую команду:

scala> val examplefile = sc.textFile("file.txt")

Здесь sc называется объектом SparkContext.

Выход:

examplefile: org.apache.spark.rdd.RDD(String) = file.txt MapPartitionsRDD(3) at textFile at :24

б) RDD может быть создан с помощью параллельного сбора следующим образом:

scala> val oddnum = Array(1, 3, 5, 7, 9)

Выход:

oddnum: Array(Int) = Array(1, 3, 5, 7, 9)
scala> val value = sc.parallelize(oddnum)

Выход:

value: org.apache.spark.rdd.RDD(Int) = ParallelCollectionRDD(4) at parallelize at :26

c) Создать из существующих RDD :

scala> val newRDD = oddnum.map(value => (value * 2))

Выход:

newRDD: Array(Int) = Array(2, 6, 10, 14, 18)

3. Существует два типа операций Spark RDD, которые можно выполнять над созданными наборами данных:

  • действия
  • Трансформации

Действия: используется для выполнения определенных необходимых операций с существующими наборами данных. Ниже приведены несколько команд, которые можно использовать для выполнения следующих действий над созданными наборами данных:

а) функция count () для подсчета количества элементов в СДР:

scala> value.count()

Выход:

res3: Long = 5

б) функция collect () для отображения всех элементов массива:

scala> value.collect()

Выход:

res5: Array(Int) = Array(1, 3, 5, 7, 9)

c) функция first (), используемая для отображения первого элемента набора данных:

scala> value.first()

Выход:

res4: Int = 1

г) функция take (n) отображает первые n элементов массива:

scala> value.take(3)

Выход:

res6: Array(Int) = Array(1, 3, 5)

e) функция takeSample (withReplacement, num, (seed)) отображает случайный массив элементов «num», где seed предназначен для генератора случайных чисел.

scala> value.takeSample(false, 3, System.nanoTime.toInt)

Выход:

res8: Array(Int) = Array(3, 1, 7)

f) функция saveAsTextFile (path) сохраняет набор данных в указанном пути расположения hdfs

scala> value.saveAsTextFile("/user/valuedir")

г) перегородки. Функция длины может использоваться для определения количества разделов в СДР.

scala> value.partitions.length

Выход:

res1: Int = 8

Преобразования СДР

Преобразование используется для формирования нового RDD из существующих. Поскольку входные данные RDD являются неизменяемыми, результат, сформированный при преобразовании, может быть одним или несколькими RDD в качестве выходных данных.

Есть два типа преобразований:

  • Узкие преобразования
  • Широкие трансформации

Узкие преобразования - каждый родительский RDD делится на различные разделы, и среди них только один раздел будет использоваться дочерним RDD.

Пример: map () и filter () - это два основных вида базовых преобразований, которые вызываются при вызове действия.

  • Функция map (func) итеративно работает с каждым из элементов в наборе данных «value», создавая выходной RDD.

Пример: В этом примере мы добавляем значение 10 к каждому из элементов значения набора данных и отображаем преобразованный вывод с помощью функции сбора.

scala> val mapfunc = value.map(x => x+10)
mapfunc: org.apache.spark.rdd.RDD(Int) = MapPartitionsRDD(3) at map at :28

scala> mapfunc.collect
res2: Array(Int) = Array(11, 13, 15, 17, 19)

Функция filter (func) в основном используется для фильтрации элементов, удовлетворяющих определенному условию, указанному с помощью функции.

Пример: в этом примере мы пытаемся получить все элементы, кроме номера 2 «значения» набора данных, и извлечь вывод с помощью функции сбора.

scala> val fill = value.filter(x => x!=2)
fill: org.apache.spark.rdd.RDD(Int) = MapPartitionsRDD(7) at filter at :28

scala> fill.collect
res8: Array(Int) = Array(4, 6, 8, 10)

Широкие преобразования. Один родительский раздел RDD совместно используется несколькими различными дочерними разделами RDD.

Пример: groupbykey и redubyKey являются примерами широких преобразований.

  • Функция groupbyKey группирует значения набора данных в пары ключ-значение в соответствии со значениями ключей из другого RDD. Этот процесс включает в себя тасование, когда группа за функцией собирает данные, связанные с конкретным ключом, и сохраняет их в одной паре ключ-значение.

Пример: В этом примере мы присваиваем целые числа 5, 6 строковому значению «ключ» и целое число 8, присвоенное «8», которые отображаются в том же формате пары ключ-значение в выходных данных.

scala> val data = spark.sparkContext.parallelize(Array(("key", 5), ("val", 8), ("key", 6)), 3)
data: org.apache.spark.rdd.RDD((String, Int)) = ParallelCollectionRDD(13) at parallelize at :23

scala> val group = data.groupByKey().collect()
group: Array((String, Iterable(Int))) = Array((key, CompactBuffer(5, 6)), (val, CompactBuffer(8)))

scala> group.foreach(println)
(key, CompactBuffer(5, 6))
(val, CompactBuffer(8))

  • Функция lowerByKey также объединяет пары ключ-значение из разных СДР. Он объединяет ключи и их соответствующие значения в один элемент после выполнения упомянутого преобразования.

Пример: в этом примере общие ключи массива «буквы» сначала распараллеливаются функцией, и каждая буква отображается с номером 10 к ней. ReduceByKey добавит значения, имеющие похожие ключи, и сохранит их в переменной value2. Выходные данные затем отображаются с использованием функции сбора.

scala> val letters = Array("A", "B", "C", "D", "B", "C", "E", "D")
letters: Array(String) = Array(A, B, C, D, B, C, E, D)

scala> val value2 = spark.sparkContext.parallelize(letters).map(w => (w, 10)).reduceByKey(_+_)
value2: org.apache.spark.rdd.RDD((String, Int)) = ShuffledRDD(20) at reduceByKey at :25

scala> value2.foreach(println)
(C, 20)
(E, 10)
(D, 20)
(B, 20)
(A, 10)

Наряду с вышеупомянутыми действиями, такими как разбиение на RDD и выполнение над ними действий / преобразований, Spark также поддерживает кэширование, что полезно, когда одни и те же данные вызываются рекурсивно.

С помощью всех этих свойств Apache Spark может обрабатывать огромные объемы данных и выполнять пакетную обработку и потоковую обработку. Вычисления в памяти, выполненные Spark, отвечают за чрезвычайно быструю обработку приложений. Следовательно, Spark является методом перехода из-за его универсальности программирования на разных языках, простоты использования и возможностей интеграции.

Рекомендуемые статьи

Это руководство по командам Spark Shell. Здесь мы обсуждаем различные типы команд оболочки Spark для разных языков программирования. Вы также можете посмотреть следующую статью, чтобы узнать больше -

  1. Команды сценариев оболочки
  2. Как установить Spark
  3. Спарк Интервью Вопросы
  4. Спарк Команды
  5. Adhoc Тестирование
  6. Генератор случайных чисел в JavaScript
  7. Руководство по списку команд оболочки Unix
  8. PySpark SQL | Модули и методы PySpark SQL
  9. Для цикла в сценариях оболочки | Как работает цикл?
  10. Команды пакетного сценария с примерами
  11. Полный обзор компонентов Spark