Поделиться через


Общие сведения о SparkR

Spark — это пакет R, предоставляющий облегченный интерфейс для использования Apache Spark из R. Кроме того, SparkR поддерживает распределенное машинное обучение с использованием MLlib.

Справочник по функциям SparkR

Информацию по актуальным функциям SparkR см. на веб-сайте Spark.Apache.org.

Справка по функциям также доступна в записных книжках R и в RStudio после импорта пакета Spark.

Встроенная документация по R

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.