Omówienie platformy SparkR
SparkR to pakiet języka R, który zapewnia lekki fronton do korzystania z platformy Apache Spark z języka R. SparkR obsługuje również rozproszone uczenie maszynowe przy użyciu biblioteki MLlib.
Informacje dotyczące funkcji platformy SparkR
Najnowsze informacje o funkcji SparkR można znaleźć w spark.apache.org.
Pomoc funkcji można również wyświetlić w notesach języka R lub programie RStudio po zaimportowaniu pakietu SparkR.
SparkR w notesach
- W przypadku platformy Spark w wersji 2.0 lub nowszej
sqlContext
nie trzeba jawnie przekazywać obiektu do każdego wywołania funkcji. - W przypadku platformy Spark w wersji 2.2 lub nowszej notesy domyślnie nie importowały aparatu SparkR, ponieważ funkcje SparkR były sprzeczne z podobnie nazwanymi funkcjami z innych popularnych pakietów. Aby użyć usługi SparkR, możesz wywołać
library(SparkR)
je w notesach. Sesja sparkR jest już skonfigurowana, a wszystkie funkcje sparkR będą komunikować się z dołączonym klastrem przy użyciu istniejącej sesji.
SparkR w zadaniach przesyłania platformy Spark
Skrypty korzystające z usługi SparkR w usłudze Azure Databricks można uruchamiać jako zadania przesyłania platformy Spark z drobnymi modyfikacjami kodu.
Tworzenie ramek danych platformy SparkR
Ramkę danych można utworzyć na podstawie lokalnego języka R data.frame
ze źródła danych lub za pomocą zapytania Spark SQL.
Z lokalnego języka R data.frame
Najprostszym sposobem utworzenia ramki danych jest przekonwertowanie lokalnego języka R data.frame
na SparkDataFrame
obiekt . W szczególności możemy użyć createDataFrame
polecenia i przekazać go do lokalnego języka R data.frame
, aby utworzyć element SparkDataFrame
. Podobnie jak większość innych funkcji platformy SparkR, createDataFrame
składnia została zmieniona na platformie Spark 2.0. Przykłady tego można znaleźć w poniższym fragmencie kodu.
Aby uzyskać więcej przykładów, zobacz createDataFrame.
library(SparkR)
df <- createDataFrame(faithful)
# Displays the content of the DataFrame to stdout
head(df)
Korzystanie z interfejsu API źródła danych
Ogólna metoda tworzenia ramki danych ze źródła danych to read.df
.
Ta metoda pobiera ścieżkę do załadowania pliku i typu źródła danych.
Usługa SparkR obsługuje natywne odczytywanie plików CSV, JSON, tekstowych i Parquet.
library(SparkR)
diamondsDF <- read.df("/databricks-datasets/Rdatasets/data-001/csv/ggplot2/diamonds.csv", source = "csv", header="true", inferSchema = "true")
head(diamondsDF)
Usługa SparkR automatycznie wywnioskuje schemat z pliku CSV.
Dodawanie łącznika źródła danych za pomocą pakietów Spark
Za pomocą pakietów Spark można znaleźć łączniki źródła danych dla popularnych formatów plików, takich jak Avro. Na przykład użyj pakietu spark-avro, aby załadować plik Avro . Dostępność pakietu spark-avro zależy od wersji klastra. Zobacz plik Avro.
Najpierw przekonwertuj obiekt na ramkę data.frame
danych platformy Spark i zapisz ją jako plik Avro.
require(SparkR)
irisDF <- createDataFrame(iris)
write.df(irisDF, source = "com.databricks.spark.avro", path = "dbfs:/tmp/iris.avro", mode = "overwrite")
Aby sprawdzić, czy plik Avro został zapisany:
%fs ls /tmp/iris.avro
Teraz ponownie użyj pakietu spark-avro, aby odczytać dane.
irisDF2 <- read.df(path = "/tmp/iris.avro", source = "com.databricks.spark.avro")
head(irisDF2)
Interfejs API źródła danych może również służyć do zapisywania ramek danych w wielu formatach plików. Na przykład można zapisać ramkę danych z poprzedniego przykładu w pliku Parquet przy użyciu polecenia write.df
.
write.df(irisDF2, path="dbfs:/tmp/iris.parquet", source="parquet", mode="overwrite")
%fs ls dbfs:/tmp/iris.parquet
Z zapytania Spark SQL
Ramki danych platformy SparkR można również tworzyć przy użyciu zapytań 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
jest elementem SparkDataFrame.
Operacje ramki danych
Ramki danych platformy Spark obsługują wiele funkcji do przetwarzania danych ze strukturą. Oto kilka podstawowych przykładów. Pełną listę można znaleźć w dokumentacji interfejsu API.
Wybieranie wierszy i kolumn
# 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))
Grupowanie i agregacja
Ramki SparkDataFrame obsługują wiele często używanych funkcji do agregowania danych po zgrupowaniu. Możesz na przykład policzyć liczbę wyświetleń każdego czasu oczekiwania w wiernym zestawie danych.
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)))
Operacje na kolumnach
Platforma SparkR udostępnia wiele funkcji, które można bezpośrednio zastosować do kolumn na potrzeby przetwarzania i agregacji danych. W poniższym przykładzie pokazano użycie podstawowych funkcji arytmetycznych.
# 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)
Uczenie maszynowe
Usługa SparkR uwidacznia większość algorytmów MLLib. Pod maską platforma SparkR używa biblioteki MLlib do trenowania modelu.
W poniższym przykładzie pokazano, jak utworzyć gaussian model GLM przy użyciu aparatu SparkR. Aby uruchomić regresję liniową, ustaw dla rodziny wartość "gaussian"
. Aby uruchomić regresję logistyczną, ustaw dla rodziny wartość "binomial"
. W przypadku korzystania z aparatu SparkML GLM SparkR automatycznie wykonuje jednorazowe kodowanie cech kategorii, aby nie trzeba było wykonywać go ręcznie.
Poza funkcjami typu String i Double można również dopasować funkcje MLlib Vector, aby zapewnić zgodność z innymi składnikami 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)
Aby zapoznać się z samouczkami, zobacz Samouczek: analizowanie danych za pomocą glm.
Aby uzyskać dodatkowe przykłady, zobacz Praca z ramkami danych i tabelami w języku R.