Какво представлява Spark Shell Commands?

Spark shell е интерфейс, използван за писане на adhoc заявки за работа и разбиране на поведението на Apache Spark. Тя се нарича клъстер изчисляване на отворен код двигател, който може да извършва в паметта обработка на данни, като например за анализи, ETL, машинно обучение за огромни набори данни. В тази тема ще научим за Spark Shell Commands.

Има различни видове Spark черупки за различни езици за програмиране например:

  1. искра-черупка е написана на Scala
  2. pyspark е в Python и
  3. sparkR за R език

Човек може да разработи самостоятелното си приложение с помощта на Spark. Той е широко използван поради своята супер бърза изчислителна скорост. Това е така, защото използва MapReduce за обработка на различни заявки и трансформации.

За да стартирате командите с искра-черупки, изисква Java и Scala да са вече инсталирани в системата.

Видове искрови командни черупки

Различните видове Spark-shell команди са, както следва:

1. За да проверите дали Spark е инсталирана и да знаете нейната версия, се използва по-долу команда (Всички команди по-долу се посочват, започвайки с този символ "$")

$ искра-черупка

Следният изход се показва, ако искрата е инсталирана:

$ искра-черупка

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 (Java HotSpot (TM) 64-битов сървър VM, Java 1.8.0_112)

Въведете изрази, за да ги оцените.

Тип: помощ за повече информация.

Скала>

2. Основната структура на данни на Spark се нарича RDD (устойчиви разпределени набори от данни), която съдържа неизменна колекция от обекти за разпределено изчисляване на записи. Всички набори от данни на 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

б) 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

в) За да създадете от съществуващите RDD :

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

изход:

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

3. Има два вида Spark RDD операции, които могат да се извършват на създадените набори от данни:

  • мерки
  • трансформации

Действия: Използва се за извършване на определени необходими операции на съществуващите набори от данни. Следват няколко от командите, които могат да бъдат използвани за извършване на по-долу действия на създадените набори от данни:

а) функция 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")

ж) дялове. функция дължина може да се използва за намиране на броя на дяловете в RDD

scala> value.partitions.length

изход:

res1: Int = 8

RDD трансформации

Трансформацията се използва за формиране на ново 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))

  • Функцията 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 е идеалният метод поради своята гъвкавост на програмиране на различни езици, лекота на използване и възможности за интеграция.

Препоръчителни статии

Това е ръководство за Spark Shell Commands. Тук обсъждаме различните видове команди за искрови обвивки за различни езици на програмиране. Можете също да разгледате следната статия, за да научите повече -

  1. Команди за скриптове на Shell
  2. Как да инсталирате Spark
  3. Искрови въпроси за интервю
  4. Искрови команди
  5. Adhoc тестване
  6. Генератор на случайни числа в JavaScript
  7. Ръководство за списъка на командите на Unix Shell
  8. PySpark SQL | Модули и методи на PySpark SQL
  9. За контур в скрипт с черупки | Как за контура работи?
  10. Команди за пакетно писане с примери
  11. Пълен преглед на искровите компоненти

Категория: