Co to są polecenia Spark Shell?

Spark Shell jest interfejsem używanym do pisania zapytań adhoc, aby działać i rozumieć zachowanie Apache Spark. Nazywa się to silnikiem klastrowym typu open source, który może przetwarzać dane w pamięci, takie jak analizy, ETL, uczenie maszynowe dla ogromnych zestawów danych. W tym temacie poznamy polecenia Spark Shell.

Istnieją różne typy powłoki Spark dla różnych języków programowania, na przykład:

  1. iskra jest napisana w języku Scala
  2. pyspark jest w Pythonie i
  3. sparkR dla języka R.

Jego samodzielną aplikację można opracować za pomocą Spark. Jest szeroko stosowany ze względu na superszybką prędkość obliczeniową. Wynika to z tego, że używa MapReduce do przetwarzania różnych zapytań i transformacji.

Aby uruchomić polecenia Spark-shell, Java i Scala muszą być już zainstalowane w systemie.

Rodzaje poleceń Spark Shell

Różne rodzaje poleceń Spark-shell są następujące:

1. Aby sprawdzić, czy Spark jest zainstalowany i poznać jego wersję, użyto poniższego polecenia (wszystkie poniższe polecenia powinny być oznaczone literą „$”)

Iskra

Jeśli iskra jest zainstalowana, wyświetlane są następujące dane wyjściowe:

Iskra

SPARK_MAJOR_VERSION jest ustawiony na 2, za pomocą Spark2

Ustawienie domyślnego poziomu dziennika na „WARN”.

Aby dostosować poziom rejestrowania, użyj sc.setLogLevel (newLevel). W przypadku SparkR użyj setLogLevel (newLevel).

Kontekst Spark Interfejs sieciowy dostępny pod adresem http://10.113.59.34:4040

Kontekst Spark dostępny jako „sc” (master = local (*), id aplikacji = local-1568732886588).

Sesja Spark dostępna jako „Spark”.

Witamy w

____ __

/ __ / __ ___ _____ / / __

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

/ ___ / .__ / \ _, _ / _ / / _ / \ _ \ wersja 2.2.0.2.6.3.0-235

/ _ /

Korzystanie z wersji Scala 2.11.8 (64-bitowa maszyna wirtualna serwera Java HotSpot ™, Java 1.8.0_112)

Wpisz wyrażenia, aby je ocenić.

Wpisz: help, aby uzyskać więcej informacji.

scala>

2. Podstawowa struktura danych Spark nazywa się RDD (Resilient Distributed Datasets), która zawiera niezmienny zbiór obiektów do rozproszonego obliczania rekordów. Wszystkie zestawy danych RDD są logicznie podzielone na wiele węzłów klastra.

RDD można utworzyć tylko poprzez odczyt z lokalnego systemu plików lub przez przekształcenie istniejącego RDD.

a) Aby utworzyć nowy RDD, używamy następującego polecenia:

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

Tutaj sc nazywany jest obiektem SparkContext.

Wynik:

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

b) RDD można utworzyć poprzez Parallelized Collection w następujący sposób:

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

Wynik:

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

Wynik:

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

c) Aby utworzyć z istniejących RDD :

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

Wynik:

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

3. Istnieją dwa typy operacji Spark RDD, które można wykonać na utworzonych zestawach danych:

  • działania
  • Transformacje

Działania: Służy do wykonywania niektórych wymaganych operacji na istniejących zestawach danych. Oto kilka poleceń, których można użyć do wykonania poniższych działań na utworzonych zestawach danych:

a) funkcja count () do zliczania liczby elementów w RDD:

scala> value.count()

Wynik:

res3: Long = 5

b) funkcja collect (), aby wyświetlić wszystkie elementy tablicy:

scala> value.collect()

Wynik:

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

c) Funkcja first () używana do wyświetlania pierwszego elementu zestawu danych:

scala> value.first()

Wynik:

res4: Int = 1

d) funkcja take (n) wyświetla pierwsze n elementów tablicy:

scala> value.take(3)

Wynik:

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

e) funkcja takeSample (withReplacement, num, (seed)) wyświetla losową tablicę elementów „num”, gdzie ziarno jest dla generatora liczb losowych.

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

Wynik:

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

f) funkcja saveAsTextFile (ścieżka) zapisuje zestaw danych w określonej ścieżce lokalizacji hdfs

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

g) przegrody. Za pomocą funkcji długości można znaleźć liczbę partycji w RDD

scala> value.partitions.length

Wynik:

res1: Int = 8

Transformacje RDD

Transformacja służy do utworzenia nowego RDD z istniejących. Ponieważ dane wejściowe RDD są niezmienne, wynikiem powstałym po transformacji może być jeden lub więcej RDD jako dane wyjściowe.

Istnieją dwa rodzaje transformacji:

  • Wąskie transformacje
  • Szerokie przekształcenia

Wąskie transformacje - każdy nadrzędny RDD jest podzielony na różne partycje i spośród nich tylko jedna partycja będzie używana przez podrzędne RDD.

Przykład: map () i filter () to dwa podstawowe rodzaje podstawowych transformacji wywoływanych po wywołaniu akcji.

  • Funkcja map (func) działa iteracyjnie na każdym z elementów w „wartości” zestawu danych, tworząc wyjściowy RDD.

Przykład: W tym przykładzie dodajemy wartość 10 do każdego elementu wartości zestawu danych i wyświetlamy przekształcone dane wyjściowe za pomocą funkcji kolekcjonowania.

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)

Funkcja filter (func) służy zasadniczo do odfiltrowywania elementów spełniających określony warunek określony za pomocą tej funkcji.

Przykład: W tym przykładzie próbujemy pobrać wszystkie elementy oprócz numeru 2 „wartości” zestawu danych i pobrać dane wyjściowe za pomocą funkcji Collect.

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)

Szerokie transformacje - pojedyncza nadrzędna partycja RDD jest współużytkowana na różnych podrzędnych partycjach RDD.

Przykład: groupbykey i replacebyKey to przykłady szerokich przekształceń.

  • Funkcja groupbyKey grupuje wartości zestawu danych w pary klucz-wartość zgodnie z wartościami klucza z innego RDD. Proces ten obejmuje tasowanie, które ma miejsce, gdy grupa według funkcji zbiera dane związane z określonym kluczem i przechowuje je w pojedynczej parze klucz-wartość.

Przykład: W tym przykładzie przypisujemy liczby całkowite 5, 6 do wartości ciągu „klucz” i liczbę całkowitą 8 przypisaną do „8”, które są wyświetlane w tym samym formacie pary klucz-wartość na wyjściu.

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

  • Funkcja replaceByKey łączy również pary klucz-wartość z różnych RDD. Łączy klucze i ich odpowiednie wartości w jeden element po wykonaniu wspomnianej transformacji.

Przykład: W tym przykładzie wspólne klucze tablicy „litery” są najpierw równoległe przez funkcję, a każda litera jest odwzorowana z liczbą 10 na nią. RedukcjaByKey doda wartości o podobnych kluczach i zapisze zmienną wartość2. Dane wyjściowe są następnie wyświetlane za pomocą funkcji Collect.

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)

Oprócz wyżej wymienionych działań, takich jak partycjonowanie do RDD i wykonywanie na nich akcji / transformacji, Spark obsługuje również buforowanie, które jest pomocne, gdy te same dane są wywoływane rekurencyjnie.

Za pomocą wszystkich tych właściwości Apache Spark może przetwarzać ogromne ilości danych oraz przetwarzać wsadowo i strumieniowo. Obliczenia w pamięci wykonane przez Spark są odpowiedzialne za niezwykle szybkie przetwarzanie aplikacji. Dlatego Spark jest metodą powszechną ze względu na wszechstronność programowania w różnych językach, łatwość użycia i możliwości integracji.

Polecane artykuły

Jest to przewodnik po poleceniach Spark Shell. Tutaj omawiamy różne typy poleceń Spark Shell dla różnych języków programowania. Możesz także spojrzeć na następujący artykuł, aby dowiedzieć się więcej -

  1. Polecenia dotyczące skryptów powłoki
  2. Jak zainstalować Spark
  3. Pytania do wywiadu Spark
  4. Polecenia Spark
  5. Testy adhoc
  6. Generator liczb losowych w JavaScript
  7. Przewodnik po liście poleceń powłoki Unix
  8. PySpark SQL | Moduły i metody PySpark SQL
  9. For Loop in Shell Scripting | Jak działa pętla?
  10. Komendy skryptowe wsadowe z przykładami
  11. Pełny przegląd komponentów Spark

Kategoria: