将 R for Apache Spark 和 Azure Synapse Analytics 配合使用(预览版)

Azure Synapse Analytics 为 Apache Spark 提供内置 R 支持。 借助此支持,数据科学家可以使用 Azure Synapse Analytics 笔记本来编写和运行其 R 代码。 这还包括对 SparkRSparklyR 的支持,让用户能使用熟悉的 Spark 或 R 接口与 Spark 进行交互。

本文介绍如何将 R for Apache Spark 与 Azure Synapse Analytics 配合使用。

R 运行时

Azure Synapse Analytics 支持 R 运行时,该运行时提供许多常用的开源 R 包,包括 TidyVerse。 R 运行时在所有 Apache Spark 3 池上都可用。

若要详细了解每个运行时上安装的库,请访问以下页面: - Azure Synapse Analytics 运行时

创建和运行笔记本会话

Azure Synapse 笔记本是一种 Web 界面,用于创建包含实时代码、可视化效果和叙述性文本的文件。 笔记本是验证想法并使用快速试验从数据中获取见解的好地方。 笔记本还广泛用于数据准备、数据可视化、机器学习和其他大数据方案。

若要开始在 Synapse 笔记本中使用 R,可以通过将语言选项设置为 SparkR (R) 来更改主要语言。

Screenshot of the R language option.

除此之外,还可以通过在单元格开始位置指定语言 magic 命令,在一个笔记本中使用多种语言。

%%sparkr
# Enter your R code here

若要详细了解 Azure Synapse Analytics 中的笔记本,请访问有关如何管理笔记本的指南。

安装包

这些库提供了可重用的代码,你可能想要在程序或项目中包含这些代码。 为使第三方或本地生成的代码可用于自己的应用程序,可向其中一个无服务器 Apache Spark 池或笔记本会话中安装一个库。

管理 R 工作区包

在 Synapse 中,工作区包可以是自定义包,也可以是专用的 R tar.gz 文件。 可以先将这些包上传到自己的工作区,以后再将其分配到特定的无服务器 Apache Spark 池。 分配后,这些工作区包就会自动安装在相应池上启动的所有 Spark 池会话上。

若要详细了解如何管理工作区库,请参阅以下文章: - 管理工作区包

管理 R 会话

在进行交互式数据分析或机器学习时,可能会尝试更新版本的包,或者可能需要当前在 Apache Spark 池中不可用的包。 现在,用户无需更新池配置,可以使用会话范围的包来添加、管理和更新会话依赖项。

  • 安装限制会话范围的库时,只有当前笔记本可以访问指定的库。
  • 这些库不会影响使用同一 Spark 池的其他会话或作业。
  • 这些库将安装在基本运行时和池级别库之上。
  • 笔记本库的优先级最高。
  • 会话范围的 R 库不会跨会话保留。 执行相关安装命令时,将在每个会话的开头安装这些库
  • 会话范围的 R 库会自动安装在驱动程序节点和工作器节点中

例如,用户可以通过 CRAN 和 CRAN 快照安装 R 库。 在下面的示例中,Highcharter 是 R 可视化效果的热门包。 我可以使用以下命令在 Apache Spark 池中的所有节点上安装此包:

install.packages("highcharter", repos = "https://cran.microsoft.com/snapshot/2021-07-16/")

若要详细了解如何管理会话 R 库,请访问以下文章:管理 R 会话包

笔记本实用工具

Microsoft Spark 实用工具 (MSSparkUtils) 是内置的包,可帮助你轻松执行常见任务。 可以使用 MSSparkUtils 来处理文件系统、获取环境变量、将笔记本链在一起以及处理机密。 R 笔记本支持 MSSparkUtils。

若要开始使用,可以运行以下命令:

library(notebookutils)
mssparkutils.fs.help()

请访问以下文章,详细了解支持的 MSSparkUtils 命令:使用 Microsoft Spark 实用工具

使用 SparkR

SparkR 是一个 R 包,提供轻量级前端以通过 R 使用 Apache Spark。SparkR 提供分布式数据帧实现,该实现支持选择、筛选、聚合等操作。SparkR 还支持使用 MLlib 的分布式机器学习。

从本地 R data.frame 创建 SparkR 数据帧

创建数据帧的最简单方法是将本地 R 数据帧转换为 SparkDataFrame。 在此示例中,我们使用 as.DataFrame 并传入本地 R 数据帧来创建 SparkDataFrame。

df <- as.DataFrame(faithful)

# Displays the first part of the SparkDataFrame
head(df)
##  eruptions waiting
##1     3.600      79
##2     1.800      54

使用 Spark 数据源 API 创建 SparkR 数据帧

SparkR 支持通过 SparkDataFrame 接口对各种数据源进行操作。 从数据源创建数据帧的常规方法是 read.df。 此方法需要获取要加载的文件的路径和数据源的类型。 SparkR 支持原生读取 CSV、JSON、文本和 Parquet 文件。

# Read a csv from ADLSg2
df <- read.df('abfss://<container name>@<storage account name>.dfs.core.chinacloudapi.cn/avocado.csv', 'csv', header="true")
head(df)

使用 Spark SQL 创建 SparkR 数据帧

还可以使用 Spark SQL 查询创建 SparkR 数据帧。

# Register this SparkDataFrame as a temporary view.
createOrReplaceTempView(df, "eruptions")

# SQL statements can be run by using the sql method
sql_df <- sql("SELECT * FROM eruptions")
head(sql_df)

机器学习

SparkR 公开大多数 MLLib 算法。 实际上,SparkR 使用 MLlib 来训练模型。 若要详细了解支持哪些机器学习算法,请访问 SparkR 和 MLlib 文档

# Create the DataFrame
cars <- cbind(model = rownames(mtcars), mtcars)
carsDF <- createDataFrame(cars)

# Fit a linear model over the dataset.
model <- spark.glm(carsDF, mpg ~ wt + cyl)

# Model coefficients are returned in a similar format to R's native glm().
summary(model)

使用 SparklyR

SparklyR 是 Apache Spark 的 R 接口。 它提供能使用熟悉的 R 接口与 Spark 交互的机制。

为了建立 sparklyr 连接,你可以在 spark_connect() 中使用以下连接方法。

spark_version <- "<enter Spark version>"
config <- spark_config()
sc <- spark_connect(master = "yarn", version = spark_version, spark_home = "/opt/spark", config = config, method='synapse')

后续步骤