/ / Transformačný proces v Apache Spark - apache-spark, rdd

Transformačný proces v Apache Spark - apache-spark, rdd

Transformácie vytvárajú nové RDD založené naexistujúci RDD. V zásade sú RDD nemenné a všetky transformácie v Sparke sú lenivé. Dáta v RDD sa nespracúvajú, kým sa neuskutoční akcia, ale bez spracovania údajov, ako sa vytvárajú nové RDD? Napríklad v filter operácia Ako sa vytvára nový RDD bez skutočného načítania RDD do pamäte a ich spracovania?

odpovede:

3 pre odpoveď č. 1

Otázka: Napríklad pri prevádzke filtra sa vytvárajú nové RDD bez skutočne načítate RDD do pamäte a spracovávate ich?

Proces transformácie v Apache Spark:

tu zadajte popis obrázku

Napr .:

firstRDD=spark.textFile("hdfs://...")

secondRDD=firstRDD.filter(someFunction);

thirdRDD = secondRDD.map(someFunction);

result = thirdRDD.count()

Keďže RDD sa vytvárajú prostredníctvom súboru transformácií, zaznamenáva tieto transformácie a nie skutočné údaje(to je ako akčný plán toho, čo je potrebné urobiť, ak filtrujeme tento konkrétny predivát) .Graf týchto transformácií na vytvorenie jedného RDD sa nazýva lineárny graf, ako je uvedené nižšie.

tu zadajte popis obrázku

Prosím pozri RDD.scala Vytvorí nový RDD, iba ak sa vyskytnú predpovede, ktoré používajú váš filter.. čo je ako akčný plán. Tento plán bude vykonaný iba vtedy, ak zavoláte akciu count.

/** * Return a new RDD containing only the elements that satisfy a predicate. */ def filter(f: T => Boolean): RDD[T] = withScope { val cleanF = sc.clean(f) new MapPartitionsRDD[T, T]( this, (context, pid, iter) => iter.filter(cleanF), preservesPartitioning = true) }

  • Lazy vyhodnotenie znamená, že keď voláme transformáciu na RDD (napríklad volanie mapy ()), operácia sa okamžite nevykoná.
  • Namiesto toho Spark interne zaznamenáva metadátanaznačujú, že táto operácia bola vyžiadaná. Namiesto toho, aby RDD obsahoval konkrétne údaje, je lepšie myslieť na každý RDD ako na návod, ako vypočítať údaje, ktoré získavame transformáciami.
  • Vkladanie údajov do RDD sa lenivo hodnotí v systéme Windows XProvnakým spôsobom sú transormácie. Keď teda zavoláme sc.textFile (), údaje sa nenačítajú, kým to nie je potrebné. Podobne ako pri transformáciách sa operácia (v tomto prípade čítanie údajov) môže vyskytnúť viackrát.

Lenivé hodnotenia: (oprava vašej ponuky “všetky transformácie v Spark sú lenivé"na"všetky transformácie v Sparke sa lenivo hodnotia")

Spark počíta RDD lenivo pri prvom použití v akcii, aby mohla premieňať potrubia. Takže v uvedenom príklade RDD budú hodnotené iba vtedy, keď count() akcia je vyvolaná.

Dúfam, že pomáha ...


0 pre odpoveď č. 2

Transformácia iskier je v prevádzke lenivá. Tieto operácie sa hneď nevypočítajú, len si pamätajú transformáciu použitú na RDD a vrátia ukazovateľ na výstup operácie. Transformačné operácie sa vypočítajú iba vtedy, keď sa na ňu použije akcia. Akonáhle sa akcia aplikuje, iskra rozdelí operácie na úlohy a rozdelí ich na uzly na vykonanie.