A SparkR áttekintése
A SparkR egy R-csomag, amely könnyű előtérrendszert biztosít az Apache Spark R-ből való használatához. A SparkR az elosztott gépi tanulást is támogatja az MLlib használatával.
SparkR-függvényreferencia
A SparkR-függvény legújabb referenciáját a spark.apache.org találja.
A SparkR-csomag importálása után az R-jegyzetfüzetekben vagy az RStudio-ban is megtekintheti a függvény súgóját.
SparkR jegyzetfüzetekben
- A Spark 2.0-s és újabb verziók esetében nem kell explicit módon átadnia egy objektumot
sqlContext
minden függvényhívásnak. - A Spark 2.2 és újabb verziók esetében a jegyzetfüzetek alapértelmezés szerint nem importálják a SparkR-t, mivel a SparkR-függvények ütköztek más népszerű csomagok hasonló nevű függvényeivel. A SparkR használatához meghívhatja
library(SparkR)
a jegyzetfüzeteket. A SparkR-munkamenet már konfigurálva van, és az összes SparkR-függvény a meglévő munkamenet használatával kommunikál a csatolt fürthöz.
SparkR a spark-submit feladatokban
Az Azure Databricks SparkR-ét spark-küldési feladatként használó szkripteket futtathat kisebb kódmódosításokkal.
SparkR-adatkeretek létrehozása
DataFrame-et helyi R-ből data.frame
, adatforrásból vagy Spark SQL-lekérdezéssel is létrehozhat.
Helyi R-ből data.frame
A DataFrame létrehozásának legegyszerűbb módja, ha egy helyi R-t data.frame
átalakít egy SparkDataFrame
. Pontosabban használhatjuk és átadhatjuk createDataFrame
a helyi R-t data.frame
egy SparkDataFrame
. A többi SparkR-függvényhez hasonlóan a createDataFrame
szintaxis is módosult a Spark 2.0-ban. Erre példákat az alábbi kódrészletben tekinthet meg.
További példákért lásd: createDataFrame.
library(SparkR)
df <- createDataFrame(faithful)
# Displays the content of the DataFrame to stdout
head(df)
Az adatforrás API használata
A DataFrame adatforrásból való létrehozásának általános módja a következő read.df
: .
Ez a módszer a betöltendő fájl elérési útját és az adatforrás típusát veszi alapul.
A SparkR támogatja a CSV-, JSON-, szöveg- és Parquet-fájlok natív olvasását.
library(SparkR)
diamondsDF <- read.df("/databricks-datasets/Rdatasets/data-001/csv/ggplot2/diamonds.csv", source = "csv", header="true", inferSchema = "true")
head(diamondsDF)
A SparkR automatikusan a CSV-fájlból következtet a sémára.
Adatforrás-összekötő hozzáadása a Spark Packages használatával
A Spark Packages segítségével adatforrás-összekötőket találhat népszerű fájlformátumokhoz, például az Avro-hoz. Példaként használja a spark-avro-csomagot egy Avro-fájl betöltéséhez. A spark-avro-csomag elérhetősége a fürt verziójától függ. Lásd: Avro-fájl.
Először készítsen egy meglévőt data.frame
, konvertálja Spark DataFrame-fájllá, és mentse Avro-fájlként.
require(SparkR)
irisDF <- createDataFrame(iris)
write.df(irisDF, source = "com.databricks.spark.avro", path = "dbfs:/tmp/iris.avro", mode = "overwrite")
Avro-fájl mentésének ellenőrzése:
%fs ls /tmp/iris.avro
Most használja ismét a spark-avro csomagot az adatok visszaolvasásához.
irisDF2 <- read.df(path = "/tmp/iris.avro", source = "com.databricks.spark.avro")
head(irisDF2)
Az adatforrás API-val a DataFrame-eket több fájlformátumba is mentheti. Mentheti például a DataFrame-et az előző példából egy Parquet-fájlba a használatával write.df
.
write.df(irisDF2, path="dbfs:/tmp/iris.parquet", source="parquet", mode="overwrite")
%fs ls dbfs:/tmp/iris.parquet
Spark SQL-lekérdezésből
SparkR DataFrame-eket Spark SQL-lekérdezésekkel is létrehozhat.
# Register earlier df as temp view
createOrReplaceTempView(irisDF2, "irisTemp")
# Create a df consisting of only the 'species' column using a Spark SQL query
species <- sql("SELECT species FROM irisTemp")
species
Egy SparkDataFrame.
DataFrame-műveletek
A Spark DataFrame-ek számos függvényt támogatnak strukturált adatfeldolgozáshoz. Íme néhány alapvető példa. Az API-dokumentumokban teljes lista található.
Sorok és oszlopok kijelölése
# Import SparkR package if this is a new notebook
require(SparkR)
# Create DataFrame
df <- createDataFrame(faithful)
# Select only the "eruptions" column
head(select(df, df$eruptions))
# You can also pass in column name as strings
head(select(df, "eruptions"))
# Filter the DataFrame to only retain rows with wait times shorter than 50 mins
head(filter(df, df$waiting < 50))
Csoportosítás és összesítés
A SparkDataFrames számos gyakran használt függvényt támogat az adatok csoportosítás utáni összesítéséhez. Megszámolhatja például, hogy az egyes várakozási idők hányszor jelennek meg a hűséges adathalmazban.
head(count(groupBy(df, df$waiting)))
# You can also sort the output from the aggregation to get the most common waiting times
waiting_counts <- count(groupBy(df, df$waiting))
head(arrange(waiting_counts, desc(waiting_counts$count)))
Oszlopműveletek
A SparkR számos olyan függvényt biztosít, amelyek közvetlenül alkalmazhatók az adatok feldolgozására és összesítésére szolgáló oszlopokra. Az alábbi példa az alapszintű aritmetikai függvények használatát mutatja be.
# Convert waiting time from hours to seconds.
# You can assign this to a new column in the same DataFrame
df$waiting_secs <- df$waiting * 60
head(df)
Gépi tanulás
A SparkR a legtöbb MLLib-algoritmust elérhetővé teszi. A motorháztető alatt a SparkR az MLlib használatával tanítja be a modellt.
Az alábbi példa bemutatja, hogyan hozhat létre gauss GLM-modellt a SparkR használatával. Lineáris regresszió futtatásához állítsa be a családot a következőre "gaussian"
: . A logisztikai regresszió futtatásához állítsa be a családot a következőre "binomial"
: . A SparkML GLM használatakor a SparkR automatikusan elvégzi a kategorikus funkciók egyszeri kódolását, hogy ne kelljen manuálisan elvégezni.
A sztring- és kettős típusú funkciókon túl az MLlib Vector-funkciókkal is elfér, hogy kompatibilis legyen más MLlib-összetevőkkel.
# Create the DataFrame
df <- createDataFrame(iris)
# Fit a linear model over the dataset.
model <- glm(Sepal_Length ~ Sepal_Width + Species, data = df, family = "gaussian")
# Model coefficients are returned in a similar format to R's native glm().
summary(model)
Az oktatóanyagokért lásd : Oktatóanyag: Adatok elemzése a glm használatával.
További példákért lásd : DataFrames és táblák használata az R-ben.