Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Importante
SparkR en Databricks está en desuso en Databricks Runtime 16.0 y versiones posteriores.
Hay dos API para los usuarios de Apache Spark para R disponibles: SparkR y sparklyr. Databricks recomienda usar sparklyr, ya que SparkR ha quedado en desuso. Para ayudarle a migrar el código, en este artículo se comparan estas API.
Orígenes de API
SparkR se crea mediante la comunidad de Spark y los desarrolladores de Databricks. Por este motivo, SparkR sigue detenidamente las clases de Scala de Spark y dataFrame API.
Sparklyr comenzó con RStudio y desde entonces se ha donado a Linux Foundation. sparklyr está estrechamente integrado en el tidyverse en su estilo de programación y a través de la interoperabilidad de API con dplyr.
SparkR y sparklyr son altamente capaces de trabajar con macrodatos en R. En los últimos años, sus conjuntos de características se acercan a la paridad.
Diferencias entre las API
En el ejemplo de código siguiente se muestra cómo usar SparkR y sparklyr desde un cuaderno de Azure Databricks para leer un archivo CSV de los conjuntos de datos de muestra en Spark.
# #############################################################################
# SparkR usage
# Note: To load SparkR into a Databricks notebook, run the following:
# library(SparkR)
# You can then remove "SparkR::" from the following function call.
# #############################################################################
# Use SparkR to read the airlines dataset from 2008.
airlinesDF <- SparkR::read.df(path = "/databricks-datasets/asa/airlines/2008.csv",
source = "csv",
inferSchema = "true",
header = "true")
# Print the loaded dataset's class name.
cat("Class of SparkR object: ", class(airlinesDF), "\n")
# Output:
#
# Class of SparkR object: SparkDataFrame
# #############################################################################
# sparklyr usage
# Note: To install, load, and connect with sparklyr in a Databricks notebook,
# run the following:
# install.packages("sparklyr")
# library(sparklyr)
# sc <- sparklyr::spark_connect(method = "databricks")
# If you run "library(sparklyr)", you can then remove "sparklyr::" from the
# preceding "spark_connect" and from the following function call.
# #############################################################################
# Use sparklyr to read the airlines dataset from 2007.
airlines_sdf <- sparklyr::spark_read_csv(sc = sc,
name = "airlines",
path = "/databricks-datasets/asa/airlines/2007.csv")
# Print the loaded dataset's class name.
cat("Class of sparklyr object: ", class(airlines_sdf))
# Output:
#
# Class of sparklyr object: tbl_spark tbl_sql tbl_lazy tbl
Sin embargo, si intenta ejecutar una función sparklyr en un SparkDataFrame
objeto de SparkR, o si intenta ejecutar una función sparkR en un tbl_spark
objeto desde sparklyr, no funcionará, como se muestra en el ejemplo de código siguiente.
# Try to call a sparklyr function on a SparkR SparkDataFrame object. It will not work.
sparklyr::sdf_pivot(airlinesDF, DepDelay ~ UniqueCarrier)
# Output:
#
# Error : Unable to retrieve a Spark DataFrame from object of class SparkDataFrame
## Now try to call s Spark R function on a sparklyr tbl_spark object. It also will not work.
SparkR::arrange(airlines_sdf, "DepDelay")
# Output:
#
# Error in (function (classes, fdef, mtable) :
# unable to find an inherited method for function 'arrange' for signature '"tbl_spark", "character"'
Esto se debe a que sparklyr traduce funciones dplyr, como arrange
en un plan de consulta SQL que usa SparkSQL. Este no es el caso de SparkR, que tiene funciones para tablas SparkSQL y DataFrames de Spark. Estos comportamientos son el motivo por el que Databricks no recomienda combinar SparkR y las API de sparklyr en el mismo script, cuaderno o trabajo.
Interoperabilidad de API
En casos poco frecuentes en los que no puede evitar combinar las API de SparkR y sparklyr, puede usar SparkSQL como un tipo de puente. Por ejemplo, en el primer ejemplo de este artículo, sparklyr cargó el conjunto de datos de líneas aéreas de 2007 en una tabla denominada airlines
. Puede usar la función SparkR sql
para consultar esta tabla, por ejemplo:
top10delaysDF <- SparkR::sql("SELECT
UniqueCarrier,
DepDelay,
Origin
FROM
airlines
WHERE
DepDelay NOT LIKE 'NA'
ORDER BY DepDelay
DESC LIMIT 10")
# Print the class name of the query result.
cat("Class of top10delaysDF: ", class(top10delaysDF), "\n\n")
# Show the query result.
cat("Top 10 airline delays for 2007:\n\n")
head(top10delaysDF, 10)
# Output:
#
# Class of top10delaysDF: SparkDataFrame
#
# Top 10 airline delays for 2007:
#
# UniqueCarrier DepDelay Origin
# 1 AA 999 RNO
# 2 NW 999 EWR
# 3 AA 999 PHL
# 4 MQ 998 RST
# 5 9E 997 SWF
# 6 AA 996 DFW
# 7 NW 996 DEN
# 8 MQ 995 IND
# 9 MQ 994 SJT
# 10 AA 993 MSY
Para ver más ejemplos, consulte Trabajo con DataFrames y tablas en R.