Paralelizace kódu R s využitím gapply

Paralelismus jazyka R je obtížné, protože kód R běží na ovladači a datech R. snímky nejsou distribuovány. Často existuje existující kód R, který se spouští místně a který se převádí na běh na Apache Spark. V jiných případech některé funkce Sparku používané k pokročilým analytickým analýzám a technikům strojového učení nemusí podporovat distribuované výpočetní prostředí. V takových případech je možné k distribuci požadovaných úloh v rámci clusteru použít rozhraní API pro systém souborů Spark.

Příklad případu použití: chcete vytvořit model strojového učení pro podmnožiny sady dat seskupené podle klíče. Pokud se podmnožiny dat vejdou na pracovní procesy, může být efektivnější použít rozhraní API pro zakládání na více modelů najednou.

gapplyFunkce a gapplyCollect používají funkci pro každou skupinu v dataframe Spark. Pro každou skupinu v dataframe Spark:

  1. Shromáždí každou skupinu jako data v jazyce R. Frame.
  2. Odešlete funkci pracovnímu procesu a spustí se.
  3. Vrátí výsledek do ovladače podle určení schématu.

Poznámka

Při volání gapply musíte zadat výstupní schéma. V systému se gapplyCollect výsledek shromáždí do ovladače pomocí dat R. snímek pro výstup.

V následujícím příkladu je model samostatného modelu podpory na airquality data pro každý měsíc vhodný. Výstupem je data. Frame s výsledným programem MSE pro každý měsíc, jak s, tak bez zadání schématu.

df <- createDataFrame(na.omit(airquality))

schema <- structType(
  structField("Month", "MSE"),
  structField("integer", "Number"))

result <- gapply(df, c("Month"), function(key, x) {
  library(e1071)
  data.frame(month = key, mse = svm(Ozone ~ ., x, cross = 3)$tot.MSE)
}, schema)
df <- createDataFrame(na.omit(airquality))

gapplyCollect(df, c("Month"), function(key, x) {
  library(e1071)
  y <- data.frame(month = key, mse = svm(Ozone ~ ., x, cross = 3)$tot.MSE)
 names(y) <- c("Month", "MSE")
  y
})

Poznámka

Začněte s datovým rámečkem Spark a nainstalujte balíčky na všechny pracovní procesy.