Introduktion til RDD i Spark

En RDD, der står for Resilient Distribueret datasæt, er et af de vigtigste begreber i Spark. Det er en skrivebeskyttet samling af poster, der er delt og distribueret over knudepunkterne i en klynge. Det kan omdannes til nogle andre RDD gennem operationer, og når en RDD er oprettet, kan den ikke ændres, snarere oprettes en ny RDD.

En vigtig funktion, hvorigennem Spark har overskredet Hadoops begrænsninger, er via RDD, fordi der snarere end at replikere dataene, vedligeholder Resilient Distribuerede Datasæt (RDD) dataene på tværs af noder i en klynge og vil gendanne dataene ved hjælp af linjegraf. I Hadoop blev dataene redundant gemt blandt de maskiner, der gav egenskaben for fejltolerance. Således er en RDD en grundlæggende abstraktion leveret af Spark til distribuerede data og beregning.

De forskellige måder at oprette en RDD er på

  • Indlæser et eksternt datasæt
  • Videregivelse af data via metoden Parallelize
  • Ved at transformere en eksisterende RDD

Lad os diskutere hver enkelt af dem i detaljer, men inden det er vi nødt til at oprette et gnistskal, der er chaufførens gnistprogram. I denne artikel har vi inkluderet kodelinjerne i skala. RDD'er kan have enhver type Python-, Java- eller Scala-objekter, inklusive brugerdefinerede klasser. Følgende er nedenstående trin, der skal følges for at starte gnistskal.

Lancering af gnistskal

Trin 1: Download og pak gnist ud. Download den aktuelle version af gnist fra det officielle websted. Pak den downloadede fil ud til ethvert sted i dit system.

Trin 2: Opsætning af Scala

  • Download scala fra scala lang.org
  • Installer scala
  • Indstil SCALA_HOME-miljøvariabel og indstil PATH-variablen til scala-papirkurven.

Trin 3: Start gnistskallen. Åbn kommandoprompten og naviger til gnistfaldmappen. Udfør-gnistskal.

Forskellige måder at oprette RDD på

1. Indlæsning af et eksternt datasæt

SparkContext's textFile-metode bruges til at indlæse dataene fra enhver kilde, der igen opretter en RDD. Spark understøtter en lang række kilder, hvorfra dataene kan trækkes, som Hadoop, HBase, Amazon S3 osv. En datakilde er en tekstfil, som vi har diskuteret her. Bortset fra tekstfiler understøtter gnistens skala-API også andre dataformater, såsom heleTextFiles, sekvensfil, Hadoop RDF og mange flere.

Eksempel

val file = sc.textFile("/path/textFile.txt"") // relative path

Den variabel, der kaldes fil, er en RDD, oprettet fra en tekstfil på det lokale system. I gnistskal er gnistkontekstobjekt (sc) allerede oprettet og bruges til at få adgang til gnist. TextFile er en metode til en org.apache.spark.SparkContext-klasse, der læser en tekstfil fra HDFS, et lokalt filsystem eller et hvilket som helst Hadoop-understøttet filsystem URI, og returnerer den som en RDD of Strings. Indgangen til denne metode er således en URI og opdeler dataene på tværs af knudepunkterne.

2. Overførsel af data via metoden Parallelize

En anden måde at oprette RDD'er er ved at tage en eksisterende samling i hukommelsen og videregive den til at parallelisere SparkContext-metoden. Selvom læring gnister denne måde at oprette RDD'er på er ganske nyttig, da vi kan oprette RDD'er i skallen og udføre operationer også. Det bruges næppe uden for test og prototyper, da det kræver, at alle data er tilgængelige på den lokale maskine. Et vigtigt punkt ved parallelisering er antallet af partitioner, som samlingen er opdelt i. Vi kan videregive nummeret (partitioner) som en anden parameter i paralleliseringsmetoden, og hvis nummeret ikke er specificeret, vil Spark beslutte baseret på klyngen.

  • Uden et antal partitioner:

val sample = sc.parallelize(Array(1, 2, 3, 4, 5))

  • Med et antal partitioner:

val sample = sc.parallelize(List(1, 2, 3, 4, 5), 3)

3. Ved at omdanne en eksisterende RDD

Der er to slags operationer, der udføres over RDD.

  1. Transformations
  2. Handlinger

Transformationer er operationer på RDD, der resulterer i oprettelsen af ​​en anden RDD, mens handlinger er de operationer, der returnerer en endelig værdi til driverprogrammet eller skriver data til et eksternt lagringssystem. Kort og filter er nogle transformationsoperationer. Overvej et eksempel på filtrering af nogle linjer fra en tekstfil. Oprindeligt oprettes en RDD ved indlæsning af tekstfilen. Derefter anvender vi en filterfunktion, der filtrerer et sæt linjer fra tekstfilen. Resultatet bliver også en RDD. Filteroperationen ændrer ikke den eksisterende input RDD. I stedet returnerer den en markør til en helt ny RDD, som er fejlene røde. Vi kan stadig bruge input RDD til andre beregninger.

val inputRDD = sc.textFile("log.txt")val errorsRDD = inputRDD.filter(line => line.contains("error"))

Nedenstående eksempel viser det samme transformationskoncept for en kortfunktion. Resultatet er den RDD, der er genereret på grund af Map-funktionen. I kortfunktionen defineres logikken, og den særlige logik anvendes til alle elementerne i datasættet.

val inputRDD = sc.parallelize(List(10, 9, 8, 7, 6, 5))val resultRDD = inputRDD.map(y => y * y)println(resultRDD.collect().mkString(", "))

Vigtige punkter at huske

  • Blandt alle de rammer, der i øjeblikket er tilgængelige, er Apache-gnist den nyeste og vinder popularitet på grund af dens unikke funktioner og enkle tilgang. Det eliminerer alle ulemper, som Hadoop udgør, samt opretholder MapReduce's egenskaber for fejltolerance og skalerbarhed. For at nå disse mål introducerer gnistplatform konceptet med RDD.
  • Der er hovedsageligt tre måder, hvorpå en RDD kan oprettes, hvor den mest basale er, når vi indlæser datasættet.
  • Parallelmetoden er i vid udstrækning kun til test og læringsformål.
  • En transformationsoperation ville resultere i en RDD.

Anbefalede artikler

Dette har været en guide til RDD i Spark. Her har vi også drøftet forskellige måder at oprette RDD på, hvordan man starter Spark-Shell med vigtige punkter. Du kan også gennemgå vores givne artikler for at lære mere-

  1. Hvad er RDD?
  2. Sådan installeres gnist
  3. Gnist streaming
  4. Spark DataFrame
  5. Hvad er gnistfaldskommandoer?
  6. Vejledning til listen over Unix Shell-kommandoer

Kategori: