Используйте sparklyr

sparklyr — это интерфейс R для Apache Spark. Он предоставляет механизм взаимодействия с Spark с помощью знакомых интерфейсов R. Используйте sparklyr для выполнения пакетных заданий в среде Spark или работы с интерактивными блокнотами Microsoft Fabric.

sparklyr используется вместе с другими пакетами tidyverse, например dplyr. Microsoft Fabric распространяет последнюю стабильную версию sparklyr и tidyverse с каждым выпуском среды выполнения. Их можно импортировать и начать использовать API.

Необходимые условия

  • Получите подписку Microsoft Fabric. Или вы можете подписаться на бесплатную пробную версию Microsoft Fabric.

  • Войдите в Microsoft Fabric.

  • Используйте переключатель интерфейса в левой нижней части домашней страницы, чтобы перейти на Fabric.

    снимок экрана меню переключателя режимов, в котором показано, где выбрать Data Science.

  • Откройте или создайте записную книжку. Дополнительные сведения см. в статье Использование записных книжек Microsoft Fabric.

  • Установите языковую опцию на SparkR (R), чтобы изменить основной язык.

  • Подключите ноутбук к lakehouse. В левой части выберите Добавить, чтобы добавить существующий лейкхаус или создать новый лейкхаус.

Подключение sparklyr к кластеру Synapse Spark

Используйте следующий метод подключения в spark_connect(), чтобы установить подключение sparklyr. Мы поддерживаем новый метод подключения с именем synapse, который позволяет подключаться к существующему сеансу Spark. Это значительно сокращает время начала сеанса sparklyr. Кроме того, мы внесли этот метод подключения в проект с открытым исходным кодом sparklyr . С method = "synapse"можно использовать sparklyr и SparkR в одном сеансе и легко обмениваться данными.

# connect sparklyr to your spark cluster
spark_version <- sparkR.version()
config <- spark_config()
sc <- spark_connect(master = "yarn", version = spark_version, spark_home = "/opt/spark", method = "synapse", config = config)

Используйте sparklyr для чтения данных

Новый сеанс Spark не содержит данных. Первым шагом является загрузка данных в память сеанса Spark или указание Spark на расположение данных, чтобы получить доступ к данным по запросу.

# load the sparklyr package
library(sparklyr)

# copy data from R environment to the Spark session's memory
mtcars_tbl <- copy_to(sc, mtcars, "spark_mtcars", overwrite = TRUE)

head(mtcars_tbl)

С помощью sparklyrможно также write и read данные из файла Lakehouse с помощью пути ABFS. Чтобы читать и записывать в Lakehouse, сначала добавьте его в свою сессию. Слева в записной книжке нажмите на Добавить, чтобы добавить существующий Lakehouse или создать новый Lakehouse.

Чтобы найти путь ABFS, щелкните правой кнопкой мыши папку Files в Lakehouse и затем выберите Копировать путь ABFS. Вставьте путь для замены abfss://xxxx@onelake.dfs.fabric.microsoft.com/xxxx/Files в этом коде:

temp_csv = "abfss://xxxx@onelake.dfs.fabric.microsoft.com/xxxx/Files/data/mtcars.csv"

# write the table to your lakehouse using the ABFS path
spark_write_csv(mtcars_tbl, temp_csv, header = TRUE, mode = 'overwrite')

# read the data as CSV from lakehouse using the ABFS path
mtcarsDF <- spark_read_csv(sc, temp_csv) 
head(mtcarsDF)

Использование sparklyr для управления данными

sparklyr предоставляет несколько методов обработки данных внутри Spark с помощью следующих методов:

  • команды dplyr
  • SparkSQL
  • Преобразователи функций Spark

Используйте dplyr

Для подготовки данных в Spark можно использовать знакомые команды dplyr. Команды выполняются внутри Spark, поэтому нет ненужных передач данных между R и Spark.

Щелкните управление данными с dplyr, чтобы просмотреть дополнительную документацию по использованию dplyr с Spark.

# count cars by the number of cylinders the engine contains (cyl), order the results descendingly
library(dplyr)

cargroup <- group_by(mtcars_tbl, cyl) %>%
  count() %>%
  arrange(desc(n))

cargroup

sparklyr и dplyr преобразуют команды R в Spark SQL для нас. Чтобы просмотреть результирующий запрос, используйте show_query().

# show the dplyr commands that are to run against the Spark connection
dplyr::show_query(cargroup)

Использование SQL

Кроме того, можно выполнять sql-запросы непосредственно в таблицах в кластере Spark. Объект spark_connection() реализует интерфейс DBI для Spark, чтобы использовать dbGetQuery() для выполнения SQL и возврата результата в виде кадра данных R:

library(DBI)
dbGetQuery(sc, "select cyl, count(*) as n from spark_mtcars
GROUP BY cyl
ORDER BY n DESC")

Использование преобразователей компонентов

Оба предыдущих метода используют инструкции SQL. Spark предоставляет команды, которые упрощают преобразование данных и не используют SQL.

Например, команда ft_binarizer() упрощает создание нового столбца, указывающего, превышает ли значение другого столбца определенное пороговое значение.

Полный список преобразователей функций Spark доступен в справочнике в разделе -FTчерез sparklyr.

mtcars_tbl %>% 
  ft_binarizer("mpg", "over_20", threshold = 20) %>% 
  select(mpg, over_20) %>% 
  head(5)

Совместное использование данных между sparklyr и SparkR

При подключении sparklyrк кластеру Synapse Spark с method = "synapse"можно использовать как sparklyr, так и SparkR в одном сеансе и легко обмениваться данными между ними. Вы можете создать таблицу Spark в sparklyr и прочитать ее из SparkR.

# load the sparklyr package
library(sparklyr)

# Create table in `sparklyr`
mtcars_sparklyr <- copy_to(sc, df = mtcars, name = "mtcars_tbl", overwrite = TRUE, repartition = 3L)

# Read table from `SparkR`
mtcars_sparklr <- SparkR::sql("select cyl, count(*) as n
from mtcars_tbl
GROUP BY cyl
ORDER BY n DESC")

head(mtcars_sparklr)

Обучение машины

Ниже приведен пример, в котором мы используем ml_linear_regression() для соответствия модели линейной регрессии. Мы используем встроенный набор данных mtcars и видим, можно ли прогнозировать потребление топлива автомобиля (mpg) на основе его веса (wt), а также количество цилиндров, содержащихся в двигателе (cyl). Мы предполагаем, что связь между mpg и каждой из наших функций является линейной.

Создание наборов данных тестирования и обучения

Используйте разделение, 70% для обучения и 30% для тестирования модели. Игра с этим соотношением приводит к различным моделям.

# split the dataframe into test and training dataframes

partitions <- mtcars_tbl %>%
  select(mpg, wt, cyl) %>% 
  sdf_random_split(training = 0.7, test = 0.3, seed = 2023)

Обучение модели

Обучение модели логистической регрессии.

fit <- partitions$training %>%
  ml_linear_regression(mpg ~ .)

fit

Теперь используйте summary() , чтобы узнать больше о качестве нашей модели, и статистической важности каждого из наших прогнозаторов.

summary(fit)

Используйте модель

Модель можно применить к тестовом набору данных, вызвав ml_predict().

pred <- ml_predict(fit, partitions$test)

head(pred)

Для получения списка моделей машинного обучения Spark, доступных через sparklyr, посетите справочник по машинному обучению.

Отключение от кластера Spark

Вы можете вызвать команду spark_disconnect() или выбрать кнопку остановить сеанс на панели инструментов записной книжки, чтобы завершить ваш сеанс Spark.

spark_disconnect(sc)

Дополнительные сведения о функциях R: