Общие сведения о SparkR
Spark — это пакет R, предоставляющий облегченный интерфейс для использования Apache Spark из R. Кроме того, SparkR поддерживает распределенное машинное обучение с использованием MLlib.
Справочник по функциям SparkR
Информацию по актуальным функциям SparkR см. на веб-сайте Spark.Apache.org.
Справка по функциям также доступна в записных книжках R и в RStudio после импорта пакета Spark.
Spark в записных книжках
- Для Spark 2.0 и более поздних версий не нужно специально передавать объект
sqlContext
в каждый вызов функции. - Для Spark 2.2 и более поздних версий записные книжки больше не импортируют SparkR по умолчанию, так как функции SparkR конфликтуют с аналогичными функциями из других популярных пакетов. Чтобы использовать SparkR, можно вызвать
library(SparkR)
в записных книжках. Сеанс SparkR уже настроен, и все функции Spark будут обращаться к подключенному кластеру, используя существующий сеанс.
SparkR в заданиях по отправке Spark
Вы можете выполнять скрипты, использующие SparkR, в Azure Databricks как задания по отправке Spark, с незначительными изменениями кода.
Создание кадров данных SparkR
Кадр данных можно создавать из локального R data.frame
, из источника данных или с помощью запроса Spark SQL.
Из локального R data.frame
Самый простой способ создать кадр данных — преобразовать локальный R data.frame
в SparkDataFrame
. В частности, можно использовать createDataFrame
и передать локальный R data.frame
для создания SparkDataFrame
. Как и в большинстве других функций SparkR, синтаксис createDataFrame
в Spark 2.0 изменился. Примеры этого можно увидеть в фрагменте кода ниже.
Дополнительные примеры см. в разделе createDataFrame.
library(SparkR)
df <- createDataFrame(faithful)
# Displays the content of the DataFrame to stdout
head(df)
Использование API источника данных
Основной метод создания кадров данных из источника — это read.df
.
Этот метод принимает путь к загружаемому файлу и тип источника данных.
SparkR поддерживает чтение файлов в формате CSV, JSON, файлов текстовом формате и файлов Parquet по умолчанию.
library(SparkR)
diamondsDF <- read.df("/databricks-datasets/Rdatasets/data-001/csv/ggplot2/diamonds.csv", source = "csv", header="true", inferSchema = "true")
head(diamondsDF)
SparkR автоматически выводит схему из CSV-файла.
Добавление соединителя источника данных с помощью пакетов Spark
С помощью пакетов Spark можно находить соединители источников данных для популярных форматов файлов, таких как Avro. Например, пакет spark-avro позволяет загрузить файл Avro . Доступность пакета spark-avro зависит от версии кластера. См. Файл Avro.
Сначала возьмите существующий data.frame
, преобразуйте его в кадр данных Spark и сохраните как файл Avro.
require(SparkR)
irisDF <- createDataFrame(iris)
write.df(irisDF, source = "com.databricks.spark.avro", path = "dbfs:/tmp/iris.avro", mode = "overwrite")
Чтобы проверить, сохранен ли файл Avro, выполните следующий код:
%fs ls /tmp/iris.avro
Теперь снова используйте пакет spark-avro для считывания данных.
irisDF2 <- read.df(path = "/tmp/iris.avro", source = "com.databricks.spark.avro")
head(irisDF2)
API источника данных также можно использовать для сохранения кадров данных в несколько форматов файлов. Например, кадр данных из предыдущего примера можно сохранить в файл Parquet с помощью команды write.df
.
write.df(irisDF2, path="dbfs:/tmp/iris.parquet", source="parquet", mode="overwrite")
%fs ls dbfs:/tmp/iris.parquet
Из запроса Spark SQL
Кадры данных Spark можно также создавать с помощью запросов 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
: кадр данных Spark
Операции с кадрами данных
Кадры данных Spark поддерживают различные функции для обработки структурированных данных. Ниже приводятся несколько простых примеров. Полный список см. в документации по API.
Выбор строк и столбцов
# 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))
Группирование и статистический анализ
Кадры данных Spart поддерживают ряд часто используемых функций для агрегирования данных после группирования. Например, можно подсчитать, сколько раз каждое время ожидания отображается в наборе данных.
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)))
Операции столбцов
SparkR предусматривает ряд функций, которые могут применяться к столбцам напрямую для обработки и агрегирования данных. В следующем примере показано применение базовых арифметических функций.
# 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)
Машинное обучение
SparkR включает большую часть алгоритмов MLLib. SparkR применяет MLlib для обучения модели.
В следующем примере показано, как создать гауссовская модель GLM с помощью SparkR. Чтобы выполнить линейную регрессию, установите для параметра family значение "gaussian"
. Чтобы выполнить логистическую регрессию, установите для параметра family значение "binomial"
. При использовании SparkML GLM Spark автоматически выполняет прямое кодирование категорийных функций, чтобы ее не нужно было выполнять вручную.
Помимо функций типа String и Double Type можно также использовать функции вектора MLlib для обеспечения совместимости с другими компонентами 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)
Учебники см. в руководстве по анализу данных с помощью glm.
Дополнительные примеры см. в статье "Работа с кадрами данных" и таблицами в R.