Tutorial: Introducción a .NET para Apache SparkTutorial: Get started with .NET for Apache Spark

En este tutorial aprenderá a ejecutar una aplicación .NET para Apache Spark con .NET Core en Windows, macOS y Ubuntu.This tutorial teaches you how to run a .NET for Apache Spark app using .NET Core on Windows, macOS, and Ubuntu.

En este tutorial aprenderá a:In this tutorial, you learn how to:

  • Preparar el entorno de .NET para Apache SparkPrepare your environment for .NET for Apache Spark
  • Implementar la primer aplicación .NET para Apache SparkWrite your first .NET for Apache Spark application
  • Compilar y ejecutar una aplicación .NET para Apache SparkBuild and run your .NET for Apache Spark application

Preparación del entornoPrepare your environment

Antes de comenzar a escribir la aplicación, debe configurar algunas dependencias de requisitos previos.Before you begin writing your app, you need to set up some prerequisite dependencies. Si puede ejecutar dotnet, java, spark-shell, desde el entorno de línea de comandos, el entorno ya está preparado y puede ir directamente a la sección siguiente.If you can run dotnet, java, spark-shell from your command line environment, then your environment is already prepared and you can skip to the next section. Si no puede ejecutar alguno o ninguno de los comandos, siga estos pasos.If you cannot run any or all of the commands, do the following steps.

1. Instalación de .NET1. Install .NET

Para empezar a compilar aplicaciones .NET, debe descargar e instalar el SDK (kit de desarrollo de software) de .NET.To start building .NET apps, you need to download and install the .NET SDK (Software Development Kit).

Descargue e instale el SDK de .NET Core.Download and install the .NET Core SDK. Al instalar el SDK, se agrega la cadena de herramientas dotnet a la variable de entorno PATH.Installing the SDK adds the dotnet toolchain to your PATH.

Una vez instalado el SDK de .NET Core, abra un símbolo del sistema o terminal nuevo y ejecute dotnet.Once you've installed the .NET Core SDK, open a new command prompt or terminal and run dotnet.

Si el comando se ejecuta e imprime información sobre cómo usar dotnet, puede pasar al paso siguiente.If the command runs and prints out information about how to use dotnet, can move to the next step. Si recibe un error 'dotnet' is not recognized as an internal or external command, asegúrese de que ha abierto un símbolo del sistema o terminal nuevo antes de ejecutar el comando.If you receive a 'dotnet' is not recognized as an internal or external command error, make sure you opened a new command prompt or terminal before running the command.

2. Instalación de Java2. Install Java

Instale Java 8.1 para Windows y MacOS, o bien OpenJDK 8 para Ubuntu.Install Java 8.1 for Windows and macOS, or OpenJDK 8 for Ubuntu.

Seleccione la versión adecuada según su sistema operativo.Select the appropriate version for your operating system. Por ejemplo, seleccione jdk-8u201-windows-x64.exe para una máquina Windows x64 (tal como se muestra debajo) o jdk-8u231-macosx-x64.dmg para macOS.For example, select jdk-8u201-windows-x64.exe for a Windows x64 machine (as shown below) or jdk-8u231-macosx-x64.dmg for macOS. Después, use el comando java para comprobar la instalación.Then, use the command java to verify the installation.

Descarga de Java

3. Instalación de software de compresión3. Install compression software

Apache Spark se descarga como un archivo .tgz comprimido.Apache Spark is downloaded as a compressed .tgz file. Use un programa de extracción, como7-Zip o WinZip, para extraer el archivo.Use an extraction program, like 7-Zip or WinZip, to extract the file.

4. Instalación de Apache Spark4. Install Apache Spark

Descargue e instale Apache Spark.Download and install Apache Spark. Tendrá que seleccionar entre la versión 2.3.* o 2.4.0, 2.4.1, 2.4.3, o bien 2.4.4 (.NET para Apache Spark no es compatible con otras versiones de Apache Spark).You'll need to select from version 2.3.* or 2.4.0, 2.4.1, 2.4.3, or 2.4.4 (.NET for Apache Spark is not compatible with other versions of Apache Spark).

En los comandos que se usan en los pasos siguientes se supone que ha descargado e instalado Apache Spark 2.4.1.The commands used in the following steps assume you have downloaded and installed Apache Spark 2.4.1. Si prefiere usar otra versión, reemplace 2.4.1 por el número de versión adecuado.If you wish to use a different version, replace 2.4.1 with the appropriate version number. Después, extraiga el archivo .tar y los archivos de Apache Spark.Then, extract the .tar file and the Apache Spark files.

Para extraer el archivo .tar anidado:To extract the nested .tar file:

  • Busque el archivo spark-2.4.1-bin-hadoop2.7.tgz que ha descargado.Locate the spark-2.4.1-bin-hadoop2.7.tgz file that you downloaded.
  • Haga clic con el botón derecho en el archivo y seleccione 7-Zip -> Extraer aquí.Right click on the file and select 7-Zip -> Extract here.
  • Se creará spark-2.4.1-bin-hadoop2.7.tar junto con el archivo .tgz que ha descargado.spark-2.4.1-bin-hadoop2.7.tar is created alongside the .tgz file you downloaded.

Para extraer los archivos de Apache Spark:To extract the Apache Spark files:

  • Haga clic con el botón derecho en spark-2.4.1-bin-hadoop2.7.tar y seleccione 7-Zip -> Extraer archivos...Right-click on spark-2.4.1-bin-hadoop2.7.tar and select 7-Zip -> Extract files...
  • Escriba C:\bin en el campo Extraer en.Enter C:\bin in the Extract to field.
  • Desactive la casilla situada debajo del campo Extraer en.Uncheck the checkbox below the Extract to field.
  • Seleccione Aceptar.Select OK.
  • Los archivos de Apache Spark se extraen en C:\bin\spark-2.4.1-bin-hadoop2.7.The Apache Spark files are extracted to C:\bin\spark-2.4.1-bin-hadoop2.7</span>

Instalación de Spark

Ejecute los comandos siguientes para establecer las variables de entorno que se usan para buscar Apache Spark.Run the following commands to set the environment variables used to locate Apache Spark. En Windows, asegúrese de ejecutar el símbolo del sistema en modo de administrador.On Windows, make sure to run the command prompt in administrator mode.

setx /M HADOOP_HOME C:\bin\spark-2.4.1-bin-hadoop2.7\
setx /M SPARK_HOME C:\bin\spark-2.4.1-bin-hadoop2.7\
setx /M PATH "%PATH%;%HADOOP_HOME%;%SPARK_HOME%\bin"

Una vez que se haya instalado todo y establecido las variables de entorno, abra un símbolo del sistema o terminal nuevo y ejecute el comando siguiente:Once you've installed everything and set your environment variables, open a new command prompt or terminal and run the following command:

spark-submit --version

Si el comando se ejecuta e imprime la información de versión, puede pasar al paso siguiente.If the command runs and prints version information, you can move to the next step.

Si recibe un error 'spark-submit' is not recognized as an internal or external command, asegúrese de que ha abierto un símbolo del sistema nuevo.If you receive a 'spark-submit' is not recognized as an internal or external command error, make sure you opened a new command prompt.

5. Instalación de .NET para Apache Spark5. Install .NET for Apache Spark

Descargue la versión Microsoft.Spark.Worker de la página de .NET para Apache Spark en GitHub.Download the Microsoft.Spark.Worker release from the .NET for Apache Spark GitHub. Por ejemplo, si se encuentra en una máquina Windows y planea usar .NET Core, descargue la versión Windows x64 netcoreapp3.1.For example if you're on a Windows machine and plan to use .NET Core, download the Windows x64 netcoreapp3.1 release.

Para extraer Microsoft.Spark.Worker:To extract the Microsoft.Spark.Worker:

  • Busque el archivo Microsoft.Spark.Worker.netcoreapp3.1.win-x64-0.8.0.zip que ha descargado.Locate the Microsoft.Spark.Worker.netcoreapp3.1.win-x64-0.8.0.zip file that you downloaded.
  • Haga clic con el botón derecho y seleccione 7-Zip -> Extraer archivos...Right-click and select 7-Zip -> Extract files....
  • Escriba C:\bin en el campo Extraer en.Enter C:\bin in the Extract to field.
  • Desactive la casilla situada debajo del campo Extraer en.Uncheck the checkbox below the Extract to field.
  • Seleccione Aceptar.Select OK.

Instalación de .NET Spark

6. Instalación de WinUtils (solo Windows)6. Install WinUtils (Windows only)

.NET para Apache Spark requiere que se instale WinUtils junto a Apache Spark..NET for Apache Spark requires WinUtils to be installed alongside Apache Spark. Descargue winutils.exe.Download winutils.exe. Después, copie WinUtils en C:\bin\spark-2.4.1-bin-hadoop2.7\bin.Then, copy WinUtils into C:\bin\spark-2.4.1-bin-hadoop2.7\bin.

Nota

Si usa otra versión de Hadoop (anotada al final del nombre de la carpeta de instalación de Spark) seleccione la versión de WinUtils que sea compatible con la versión de Hadoop.If you are using a different version of Hadoop, which is annotated at the end of your Spark install folder name, select the version of WinUtils that's compatible with your version of Hadoop.

7. Establecimiento de DOTNET_WORKER_DIR y comprobación de las dependencias7. Set DOTNET_WORKER_DIR and check dependencies

Ejecute uno de los comandos siguientes para establecer la variable de entorno DOTNET_WORKER_DIR, que las aplicaciones .NET usan con el fin de buscar .NET para Apache Spark.Run one of the following commands to set the DOTNET_WORKER_DIR environment variable, which is used by .NET apps to locate .NET for Apache Spark. Asegúrese de reemplazar <PATH-DOTNET_WORKER_DIR> por el directorio donde descargó y extrajo el Microsoft.Spark.Worker.Make sure to replace <PATH-DOTNET_WORKER_DIR> with the directory where you downloaded and extracted the Microsoft.Spark.Worker. En Windows, asegúrese de ejecutar el símbolo del sistema en modo de administrador.On Windows, make sure to run the command prompt in administrator mode.

setx /M DOTNET_WORKER_DIR <PATH-DOTNET-WORKER-DIR>

Por último, confirme que puede ejecutar dotnet, java, spark-shell desde la línea de comandos antes de pasar a la sección siguiente.Finally, double-check that you can run dotnet, java, spark-shell from your command line before you move to the next section.

Escritura de una aplicación de .NET para Apache SparkWrite a .NET for Apache Spark app

1. Crear una aplicación de consola1. Create a console app

En el símbolo del sistema o terminal, ejecute los comandos siguientes para crear una aplicación de consola nueva:In your command prompt or terminal, run the following commands to create a new console application:

dotnet new console -o MySparkApp
cd MySparkApp

El comando dotnet crea una aplicación new de tipo console de forma automática.The dotnet command creates a new application of type console for you. El parámetro -o crea un directorio denominado mySparkApp donde se almacena la aplicación y lo rellena con los archivos necesarios.The -o parameter creates a directory named MySparkApp where your app is stored and populates it with the required files. El comando cd MySparkApp cambia el directorio al directorio de la aplicación que acaba de crear.The cd MySparkApp command changes the directory to the app directory you created.

2. Instalación del paquete NuGet2. Install NuGet package

Para usar .NET para Apache Spark en una aplicación, instale el paquete Microsoft.Spark.To use .NET for Apache Spark in an app, install the Microsoft.Spark package. En el símbolo del sistema o terminal, ejecute el comando siguiente:In your command prompt or terminal, run the following command:

dotnet add package Microsoft.Spark

Nota

En este tutorial se usa la versión más reciente del paquete NuGet de Microsoft.Spark, a menos que se especifique lo contrario.This tutorial uses the latest version of the Microsoft.Spark NuGet package unless otherwise specified.

3. Escritura de la aplicación3. Write your app

Abra Program.cs en Visual Studio Code o cualquier editor de texto, y reemplace todo el código por lo siguiente:Open Program.cs in Visual Studio Code, or any text editor, and replace all of the code with the following:

using Microsoft.Spark.Sql;
using static Microsoft.Spark.Sql.Functions;

namespace MySparkApp
{
    class Program
    {
        static void Main(string[] args)
        {
            // Create Spark session
            SparkSession spark =
                SparkSession
                    .Builder()
                    .AppName("word_count_sample")
                    .GetOrCreate();

            // Create initial DataFrame
            string filePath = args[0];
            DataFrame dataFrame = spark.Read().Text(filePath);

            //Count words
            DataFrame words =
                dataFrame
                    .Select(Split(Col("value")," ").Alias("words"))
                    .Select(Explode(Col("words")).Alias("word"))
                    .GroupBy("word")
                    .Count()
                    .OrderBy(Col("count").Desc());

            // Display results
            words.Show();

            // Stop Spark session
            spark.Stop();
        }
    }
}

El objeto SparkSession es el punto de entrada de las aplicaciones Apache Spark, que administra el contexto y la información de la aplicación.SparkSession is the entrypoint of Apache Spark applications, which manages the context and information of your application. Mediante el método Text, los datos de texto del archivo especificado por filePath se leen en un DataFrame.Using the Text method, the text data from the file specified by the filePath is read into a DataFrame. Un DataFrame es una manera de organizar los datos en un conjunto de columnas con nombre.A DataFrame is a way of organizing data into a set of named columns. A continuación, se aplica una serie de transformaciones para dividir las frases en el archivo, agrupar cada una de las palabras, contarlas y ordenarlas en orden descendente.Then, a series of transformations is applied to split the sentences in the file, group each of the words, count them and order them in descending order. El resultado de estas operaciones se almacena en otro DataFrame.The result of these operations is stored in another DataFrame. Tenga en cuenta que, en este momento, no se ha realizado ninguna operación porque .NET para Apache Spark evalúa los datos de forma diferida.Note that at this point, no operations have taken place because .NET for Apache Spark lazily evaluates the data. No es hasta que se llama al método Show para mostrar el contenido del DataFrame transformado words en la consola que se ejecutan las operaciones definidas en las líneas anteriores.It's not until the Show method is called to display the contents of the words transformed DataFrame to the console that the operations defined in the lines above execute. Cuando ya no necesite la sesión de Spark, use el método Stop para detener la sesión.Once you no longer need the Spark session, use the Stop method to stop your session.

4. Creación del archivo de datos4. Create data file

La aplicación procesa un archivo que contiene líneas de texto.Your app processes a file containing lines of text. Cree un archivo llamado input.txt en el directorio MySparkApp, con el texto siguiente:Create a file called input.txt file in your MySparkApp directory, containing the following text:

Hello World
This .NET app uses .NET for Apache Spark
This .NET app counts words with Apache Spark

Guarde los cambios y cierre el archivo.Save the changes and close the file.

Ejecución de la aplicación de .NET para Apache SparkRun your .NET for Apache Spark app

Ejecute el comando siguiente para compilar la aplicación:Run the following command to build your application:

dotnet build

Desplácese al directorio de salida de la compilación y use el comando spark-submit para enviar la aplicación para que se ejecute en Apache Spark.Navigate to your build output directory and use the spark-submit command to submit your application to run on Apache Spark. Asegúrese de reemplazar <version> por la versión del trabajo de .NET y <path-of-input.txt> por la ruta de acceso del archivo input.txt donde está almacenado.Make sure to replace <version> with the version of your .NET worker and <path-of-input.txt> with the path of your input.txt file is stored.

spark-submit ^
--class org.apache.spark.deploy.dotnet.DotnetRunner ^
--master local ^
microsoft-spark-2.4.x-<version>.jar ^
dotnet MySparkApp.dll <path-of-input.txt>

Nota

Este comando asume que se ha descargado Apache Spark y se ha agregado a la variable de entorno PATH para poder usar spark-submit.This command assumes you have downloaded Apache Spark and added it to your PATH environment variable to be able to use spark-submit. De lo contrario, tendría que usar la ruta de acceso completa (por ejemplo, C:\bin\apache-spark\bin\spark-submit o ~/spark/bin/spark-submit).Otherwise, you'd have to use the full path (for example, C:\bin\apache-spark\bin\spark-submit or ~/spark/bin/spark-submit).

Cuando la aplicación se ejecuta, los datos de recuento de palabras del archivo input.txt se escriben en la consola.When your app runs, the word count data of the input.txt file is written to the console.

+------+-----+
|  word|count|
+------+-----+
|  .NET|    3|
|Apache|    2|
|   app|    2|
|  This|    2|
| Spark|    2|
| World|    1|
|counts|    1|
|   for|    1|
| words|    1|
|  with|    1|
| Hello|    1|
|  uses|    1|
+------+-----+

¡Enhorabuena!Congratulations! Ha creado y ejecutado correctamente una aplicación de .NET para Apache Spark.You successfully authored and ran a .NET for Apache Spark app.

Pasos siguientesNext steps

En este tutorial, ha aprendido a:In this tutorial, you learned how to:

  • Preparar el entorno de .NET para Apache SparkPrepare your environment for .NET for Apache Spark
  • Implementar la primer aplicación .NET para Apache SparkWrite your first .NET for Apache Spark application
  • Compilar y ejecutar una aplicación .NET para Apache SparkBuild and run your .NET for Apache Spark application

Para ver un vídeo en el que se explican los pasos anteriores, consulte la serie de vídeos .NET para Apache Spark 101.To see a video explaining the steps above, check out the .NET for Apache Spark 101 video series.

Eche un vistazo a la página de recursos para obtener más información.Check out the resources page to learn more.