Přehled SparkR
SparkR je balíček R, který poskytuje lehký front-end pro použití Apache Sparku z R. SparkR také podporuje distribuované strojové učení pomocí knihovny MLlib.
Reference k funkcím SparkR
Nejnovější referenční informace o funkcích SparkR najdete na spark.apache.org.
Po importu balíčku SparkR můžete také zobrazit nápovědu k funkcím v poznámkových blocích R nebo RStudio.
SparkR v poznámkových blocích
- Pro Spark 2.0 a vyšší není nutné explicitně předat objekt každému
sqlContext
volání funkce. - V případě Sparku 2.2 a novějších už poznámkové bloky ve výchozím nastavení neimportují SparkR, protože funkce SparkR byly v konfliktu s podobnými pojmenovanými funkcemi z jiných oblíbených balíčků. Pokud chcete použít SparkR, můžete volat
library(SparkR)
v poznámkových blocích. Relace SparkR je už nakonfigurovaná a všechny funkce SparkR budou komunikovat s připojeným clusterem pomocí existující relace.
SparkR v úlohách spark-submit
Můžete spouštět skripty, které používají SparkR v Azure Databricks jako úlohy spark-submit, s menšími úpravami kódu.
Vytváření datových rámců SparkR
Datový rámec můžete vytvořit z místního jazyka R data.frame
, ze zdroje dat nebo pomocí dotazu Spark SQL.
Z místního jazyka R data.frame
Nejjednodušší způsob, jak vytvořit datový rámec, je převést místní R data.frame
na .SparkDataFrame
Konkrétně můžeme použít createDataFrame
a předat místní R data.frame
k vytvoření SparkDataFrame
. Stejně jako většina ostatních funkcí SparkR se createDataFrame
syntaxe změnila ve Sparku 2.0. Příklady najdete v následujícím fragmentu kódu.
Další příklady najdete v tématu createDataFrame.
library(SparkR)
df <- createDataFrame(faithful)
# Displays the content of the DataFrame to stdout
head(df)
Použití rozhraní API zdroje dat
Obecná metoda pro vytvoření datového rámce ze zdroje dat je read.df
.
Tato metoda přebírá cestu pro načtení souboru a typ zdroje dat.
SparkR nativně podporuje čtení souborů CSV, JSON, textu a Parquet.
library(SparkR)
diamondsDF <- read.df("/databricks-datasets/Rdatasets/data-001/csv/ggplot2/diamonds.csv", source = "csv", header="true", inferSchema = "true")
head(diamondsDF)
SparkR automaticky odvodí schéma ze souboru CSV.
Přidání konektoru zdroje dat s balíčky Sparku
Prostřednictvím balíčků Sparku najdete konektory zdroje dat pro oblíbené formáty souborů, jako je Avro. Jako příklad použijte balíček spark-avro k načtení souboru Avro . Dostupnost balíčku Spark-avro závisí na verzi vašeho clusteru. Viz soubor Avro.
Nejprve převeďte existující data.frame
datový rámec Sparku a uložte ho jako soubor Avro.
require(SparkR)
irisDF <- createDataFrame(iris)
write.df(irisDF, source = "com.databricks.spark.avro", path = "dbfs:/tmp/iris.avro", mode = "overwrite")
Ověření uložení souboru Avro:
%fs ls /tmp/iris.avro
Teď znovu použijte balíček spark-avro ke čtení dat.
irisDF2 <- read.df(path = "/tmp/iris.avro", source = "com.databricks.spark.avro")
head(irisDF2)
Rozhraní API zdroje dat lze také použít k ukládání datových rámců do více formátů souborů. Datový rámec z předchozího příkladu můžete například uložit do souboru Parquet pomocí write.df
.
write.df(irisDF2, path="dbfs:/tmp/iris.parquet", source="parquet", mode="overwrite")
%fs ls dbfs:/tmp/iris.parquet
Z dotazu Spark SQL
Datové rámce SparkR můžete vytvářet také pomocí dotazů Spark SQL.
# 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
je SparkDataFrame.
Operace datového rámce
Datové rámce Spark podporují řadu funkcí pro zpracování strukturovaných dat. Tady je několik základních příkladů. Úplný seznam najdete v dokumentaci k rozhraní API.
Výběr řádků a sloupců
# 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))
Seskupení a agregace
SparkDataFrames podporuje řadu běžně používaných funkcí pro agregaci dat po seskupení. Můžete například spočítat, kolikrát se každý čas čekání zobrazí v věrné datové sadě.
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)))
Operace se sloupci
SparkR poskytuje řadu funkcí, které je možné přímo použít u sloupců pro zpracování a agregaci dat. Následující příklad ukazuje použití základních aritmetických funkcí.
# 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)
Strojové učení
SparkR zveřejňuje většinu algoritmů MLLib. SparkR pod kapotou používá K trénování modelu MLlib.
Následující příklad ukazuje, jak vytvořit gaussian GLM model pomocí SparkR. Chcete-li spustit lineární regresi, nastavte rodinu na "gaussian"
. Pokud chcete spustit logistickou regresi, nastavte rodinu na "binomial"
hodnotu . Pokud používáte SparkML GLM SparkR, automaticky provádí kódování kategorických funkcí s jedním žhavým kódováním, aby se nemuselo provádět ručně.
Kromě funkcí typu String a Double je také možné přizpůsobit funkce MLlib Vector, aby byly kompatibilní s jinými komponentami knihovny MLlib.
# 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)
Kurzy najdete v tématu Kurz: Analýza dat pomocí nástroje glm.
Další příklady najdete v tématu Práce s datovými rámci a tabulkami v jazyce R.