Що таке команди іскрової оболонки?

Іскра-оболонка - це інтерфейс, який використовується для запису adhoc-запитів для роботи та розуміння поведінки Apache Spark. Він називається кластерним обчислювальним механізмом з відкритим кодом, який може виконувати обробку даних в пам'яті, таких як аналітика, ETL, машинне навчання для величезних наборів даних. У цій темі ми збираємося дізнатися про команду Spark Shell.

Наприклад, існують різні типи оболонки Spark для різних мов програмування:

  1. Іскра-шкаралупа написана в Scala
  2. pyspark є в Python і
  3. sparkR для мови R

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

Для запуску команд іскрової оболонки в системі вже потрібно встановити Java та Scala.

Типи команд іскрової оболонки

Різні види команд Spark-shell такі:

1. Щоб перевірити, чи встановлена ​​іскра, і знати її версію, використовується команда нижче (усі команди вказуються далі, починаючи з цього символу "$")

$ іскрова оболонка

Якщо встановлена ​​іскра, відображається наступний вихід:

$ іскрова оболонка

SPARK_MAJOR_VERSION встановлено на 2, використовуючи Spark2

Встановлення рівня журналу за замовчуванням на "ЗАПЕРЕДЖЕННЯ".

Для регулювання рівня журналу використовуйте sc.setLogLevel (newLevel). Для SparkR використовуйте setLogLevel (newLevel).

Іскровий контекст веб-інтерфейсу доступний за посиланням http://10.113.59.34:4040

Контекст іскри доступний як "sc" (master = local (*), id програми = local-1568732886588).

Іскровий сеанс доступний як "іскра".

Ласкаво просимо до

____ __

/ __ / __ ___ _____ / / __

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

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

/ _ /

Використання Scala версії 2.11.8 (64-бітовий сервер VM для Java HotSpot (TM), Java 1.8.0_112)

Введіть вирази, щоб оцінити їх.

Тип: довідка для отримання додаткової інформації.

scala>

2. Основна структура даних Spark називається RDD (Resilient Distributed Nets), яка містить незмінну колекцію об'єктів для розподілених обчислень записів. Всі набори даних RDD логічно розподілені на декілька вузлів кластера.

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

a) Для створення нового 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

b) RDD може бути створений за допомогою Parallelized Collection наступним чином:

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. Існує два типи іскрових RDD-операцій, які можна виконувати на створених наборах даних:

  • Дії
  • Трансформації

Дії: використовується для виконання певних необхідних операцій на існуючих наборах даних. Далі наведено декілька команд, які можна використовувати для виконання наведених нижче дій на створених наборах даних:

a) функція count () для підрахунку кількості елементів в RDD:

scala> value.count()

Вихід:

res3: Long = 5

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

scala> value.collect()

Вихід:

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

в) перша () функція, що використовується для відображення першого елемента набору даних:

scala> value.first()

Вихід:

res4: Int = 1

d) функція take (n) відображає перші n елементів масиву:

scala> value.take(3)

Вихід:

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

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

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

Вихід:

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

f) функція saveAsTextFile (шлях) зберігає набір даних у вказаному шляху розташування hdfs

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

ж) перегородки. Функція length може бути використана для пошуку кількості розділів в RDD

scala> value.partitions.length

Вихід:

res1: Int = 8

Трансформації RDD

Трансформація використовується для формування нового RDD із існуючих. Оскільки входи RDD незмінні, результат, що утворюється при перетворенні, може бути одним або декількома RDD як вихідними.

Існує два типи перетворень:

  • Вузькі перетворення
  • Широкі перетворення

Вузькі перетворення - Кожен батьківський RDD розділений на різні розділи, і серед цих лише один розділ буде використовуватися дочірньою RDD.

Приклад: map () та filter () - це два основних види основних перетворень, які викликаються при виклику дії.

  • Функція map (func) функціонує на кожному з елементів у наборі даних «значення» ітераційно для отримання вихідного 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))

  • Функція reduByKey також поєднує пари ключ-значення з різних RDD. Він поєднує ключі та їх відповідні значення в єдиний елемент після виконання згаданого перетворення.

Приклад: У цьому прикладі загальні клавіші масиву "літери" спочатку паралельно функціонують, і кожна буква відображається з числом 10 до неї. ReduByKey додасть значення, що мають подібні клавіші, і зберігає у змінній 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 - це метод, завдяки якому він багатофункціональний у програмуванні на різних мовах, простоті у використанні та інтеграції.

Рекомендовані статті

Це посібник із команд іскрової оболонки. Тут ми обговорюємо різні типи команд іскрової оболонки для різних мов програмування. Ви також можете переглянути наступну статтю, щоб дізнатися більше -

  1. Команди сценаріїв оболонок
  2. Як встановити Spark
  3. Питання інтерв'ю
  4. Іскрові команди
  5. Тест Адхока
  6. Генератор випадкових чисел у JavaScript
  7. Посібник зі списку команд оболонки Unix
  8. PySpark SQL | Модулі та методи PySpark SQL
  9. Для циклу в оболонці Сценарій | Як для циклу працює?
  10. Команди пакетного сценарію з прикладами
  11. Повний огляд іскрових компонентів

Категорія: