Tutorial: Compilar um aplicativo de aprendizado de máquina do Apache Spark no Azure HDInsightTutorial: Build an Apache Spark machine learning application in Azure HDInsight

Neste tutorial, você aprenderá a usar o Jupyter Notebook para compilar um aplicativo de aprendizado de máquina do Apache Spark para o Azure HDInsight.In this tutorial, you learn how to use the Jupyter Notebook to build an Apache Spark machine learning application for Azure HDInsight.

MLib: A biblioteca de Machine Learning escalável do Spark que consiste em algoritmos e utilitários de aprendizado comuns, incluindo classificação, regressão, clustering, filtragem colaborativa, redução de dimensionalidade, bem como primitivos de otimização subjacente.MLlib is Spark’s scalable machine learning library consisting of common learning algorithms and utilities, including classification, regression, clustering, collaborative filtering, dimensionality reduction, as well as underlying optimization primitives.

Neste tutorial, você aprenderá como:In this tutorial, you learn how to:

  • Desenvolver um aplicativo de aprendizado de máquina do Apache SparkDevelop an Apache Spark machine learning application

Pré-requisitosPrerequisites

Entender o conjunto de dadosUnderstand the data set

O aplicativo usa os dados de HVAC.csv de exemplo que estão disponíveis em todos os clusters por padrão.The application uses the sample HVAC.csv data that is available on all clusters by default. O arquivo está localizado em \HdiSamples\HdiSamples\SensorSampleData\hvac.The file is located at \HdiSamples\HdiSamples\SensorSampleData\hvac. Os dados mostram a temperatura de destino e a temperatura real de algumas compilações com sistemas de HVAC instalados.The data shows the target temperature and the actual temperature of some buildings that have HVAC systems installed. A coluna System representa a ID do sistema e a coluna SystemAge representa o número de anos que o sistema HVAC foi instalado no prédio.The System column represents the system ID and the SystemAge column represents the number of years the HVAC system has been in place at the building. Usando os dados, você pode prever se um prédio será mais quente ou frio com base na temperatura de destino, uma ID de sistema e a idade do sistema.Using the data, you can predict whether a building will be hotter or colder based on the target temperature, given a system ID, and system age.

Exemplo de instantâneo dos dados usados para aprendizado de máquina do SparkSnapshot of data used for Spark machine learning example

Desenvolver um aplicativo de aprendizado de máquina do Spark usando o MLlib SparkDevelop a Spark machine learning application using Spark MLlib

Neste aplicativo, você usa um pipeline ML do Spark para executar uma classificação de documento.In this application, you use a Spark ML pipeline to perform a document classification. Pipelines ML fornece um conjunto uniforme de APIs de alto nível criado com base em quadros de dados que ajudam os usuários a criar e ajustar os pipelines de aprendizado de máquina práticos.ML Pipelines provide a uniform set of high-level APIs built on top of DataFrames that help users create and tune practical machine learning pipelines. No pipeline, você divide o documento em palavras, converte as palavras em um vetor de recurso numérico e, finalmente, cria um modelo de previsão usando as etiquetas e vetores de recurso.In the pipeline, you split the document into words, convert the words into a numerical feature vector, and finally build a prediction model using the feature vectors and labels. Execute as seguintes etapas para criar o aplicativo.Perform the following steps to create the application.

  1. Crie um bloco de notas do Jupyter usando o kernel PySpark.Create a Jupyter notebook using the PySpark kernel. Para obter instruções, consulte Criar um bloco de notas do Jupyter.For the instructions, see Create a Jupyter notebook.

  2. Importe os tipos obrigatórios necessários para este cenário.Import the types required for this scenario. Cole o snippet a seguir em uma célula vazia e pressione SHIFT+ENTER.Paste the following snippet in an empty cell, and then press SHIFT + ENTER.

    from pyspark.ml import Pipeline
    from pyspark.ml.classification import LogisticRegression
    from pyspark.ml.feature import HashingTF, Tokenizer
    from pyspark.sql import Row
    
    import os
    import sys
    from pyspark.sql.types import *
    
    from pyspark.mllib.classification import LogisticRegressionWithSGD
    from pyspark.mllib.regression import LabeledPoint
    from numpy import array
    
  3. Carregue os dados (hvac.csv), analisá-los e usá-los para treinar o modelo.Load the data (hvac.csv), parse it, and use it to train the model.

    # Define a type called LabelDocument
    LabeledDocument = Row("BuildingID", "SystemInfo", "label")
    
    # Define a function that parses the raw CSV file and returns an object of type LabeledDocument
    def parseDocument(line):
        values = [str(x) for x in line.split(',')]
        if (values[3] > values[2]):
            hot = 1.0
        else:
            hot = 0.0
    
        textValue = str(values[4]) + " " + str(values[5])
    
        return LabeledDocument((values[6]), textValue, hot)
    
    # Load the raw HVAC.csv file, parse it using the function
    data = sc.textFile("/HdiSamples/HdiSamples/SensorSampleData/hvac/HVAC.csv")
    
    documents = data.filter(lambda s: "Date" not in s).map(parseDocument)
    training = documents.toDF()
    

    No snippet de código, você definirá uma função que compare a temperatura real com a temperatura de destino.In the code snippet, you define a function that compares the actual temperature with the target temperature. Se a temperatura real é maior, o prédio está quente, indicado pelo valor 1,0.If the actual temperature is greater, the building is hot, denoted by the value 1.0. Caso contrário, a compilação fica fria, como indicado pelo valor 0,0.Otherwise the building is cold, denoted by the value 0.0.

  4. Configure o pipeline de aprendizado de máquina Spark que consiste de três estágios: tokenizer, hashingTF e lr.Configure the Spark machine learning pipeline that consists of three stages: tokenizer, hashingTF, and lr.

    tokenizer = Tokenizer(inputCol="SystemInfo", outputCol="words")
    hashingTF = HashingTF(inputCol=tokenizer.getOutputCol(), outputCol="features")
    lr = LogisticRegression(maxIter=10, regParam=0.01)
    pipeline = Pipeline(stages=[tokenizer, hashingTF, lr])
    

    Para obter mais informações sobre o pipeline e como ele funciona, confira Pipeline de aprendizado de máquina Apache Spark.For more information about pipeline and how it works, see Apache Spark machine learning pipeline.

  5. Ajuste o pipeline para o documento de treinamento.Fit the pipeline to the training document.

    model = pipeline.fit(training)
    
  6. Verifique o documento de treinamento para o ponto de verificação de seu progresso com o aplicativo.Verify the training document to checkpoint your progress with the application.

    training.show()
    

    A saída deverá ser semelhante a:The output is similar to:

    +----------+----------+-----+
    |BuildingID|SystemInfo|label|
    +----------+----------+-----+
    |         4|     13 20|  0.0|
    |        17|      3 20|  0.0|
    |        18|     17 20|  1.0|
    |        15|      2 23|  0.0|
    |         3|      16 9|  1.0|
    |         4|     13 28|  0.0|
    |         2|     12 24|  0.0|
    |        16|     20 26|  1.0|
    |         9|      16 9|  1.0|
    |        12|       6 5|  0.0|
    |        15|     10 17|  1.0|
    |         7|      2 11|  0.0|
    |        15|      14 2|  1.0|
    |         6|       3 2|  0.0|
    |        20|     19 22|  0.0|
    |         8|     19 11|  0.0|
    |         6|      15 7|  0.0|
    |        13|      12 5|  0.0|
    |         4|      8 22|  0.0|
    |         7|      17 5|  0.0|
    +----------+----------+-----+
    

    Comparando a saída em relação ao arquivo CSV bruto.Comparing the output against the raw CSV file. Por exemplo, a primeira linha do arquivo CSV tem esses dados:For example, the first row the CSV file has this data:

    Exemplo de instantâneo dos dados de saída para aprendizado de máquina do SparkOutput data snapshot for Spark machine learning example

    Observe como a temperatura real é menor que a temperatura de destino sugerindo que o prédio está frio.Notice how the actual temperature is less than the target temperature suggesting the building is cold. Portanto, no resultado do treinamento, o valor para o rótulo na primeira linha é 0,0, o que significa que o prédio não está quente.Hence in the training output, the value for label in the first row is 0.0, which means the building is not hot.

  7. Prepare um conjunto de dados para executar o modelo treinado.Prepare a data set to run the trained model against. Para fazer isso, você passa por uma ID de sistema e idade de sistema (denotado como SystemInfo no resultado de treinamento), e o modelo prevê se o prédio com essa ID de sistema e idade de sistema será mais quente (indicado por 1,0) ou mais frio (indicado pelo 0,0).To do so, you pass on a system ID and system age (denoted as SystemInfo in the training output), and the model predicts whether the building with that system ID and system age will be hotter (denoted by 1.0) or cooler (denoted by 0.0).

    # SystemInfo here is a combination of system ID followed by system age
    Document = Row("id", "SystemInfo")
    test = sc.parallelize([(1L, "20 25"),
                    (2L, "4 15"),
                    (3L, "16 9"),
                    (4L, "9 22"),
                    (5L, "17 10"),
                    (6L, "7 22")]) \
        .map(lambda x: Document(*x)).toDF()
    
  8. Por fim, faça as previsões nos dados de teste.Finally, make predictions on the test data.

    # Make predictions on test documents and print columns of interest
    prediction = model.transform(test)
    selected = prediction.select("SystemInfo", "prediction", "probability")
    for row in selected.collect():
        print row
    

    A saída deverá ser semelhante a:The output is similar to:

    Row(SystemInfo=u'20 25', prediction=1.0, probability=DenseVector([0.4999, 0.5001]))
    Row(SystemInfo=u'4 15', prediction=0.0, probability=DenseVector([0.5016, 0.4984]))
    Row(SystemInfo=u'16 9', prediction=1.0, probability=DenseVector([0.4785, 0.5215]))
    Row(SystemInfo=u'9 22', prediction=1.0, probability=DenseVector([0.4549, 0.5451]))
    Row(SystemInfo=u'17 10', prediction=1.0, probability=DenseVector([0.4925, 0.5075]))
    Row(SystemInfo=u'7 22', prediction=0.0, probability=DenseVector([0.5015, 0.4985]))
    

    Na primeira linha na previsão, você pode ver que para um sistema HVAC com ID 20 e sistema de 25 anos, o prédio está quente (previsão = 1,0).From the first row in the prediction, you can see that for an HVAC system with ID 20 and system age of 25 years, the building is hot (prediction=1.0). O primeiro valor de DenseVector (0,49999) corresponde à previsão 0,0 e o segundo valor (0,5001) corresponde à previsão 1,0.The first value for DenseVector (0.49999) corresponds to the prediction 0.0 and the second value (0.5001) corresponds to the prediction 1.0. Na saída, mesmo que o segundo valor seja apenas um pouco mais alto, o modelo mostra previsão = 1,0.In the output, even though the second value is only marginally higher, the model shows prediction=1.0.

  9. Feche o bloco de anotações para liberar os recursos.Shut down the notebook to release the resources. Para fazer isso, no menu Arquivo do notebook, selecione Fechar e Interromper.To do so, from the File menu on the notebook, select Close and Halt. Essa ação desliga e fecha o bloco de anotações.This action shuts down and closes the notebook.

Use a biblioteca Anaconda scikit-learn para aprendizado de máquina do SparkUse Anaconda scikit-learn library for Spark machine learning

Os clusters Apache Spark no HDInsight incluem bibliotecas Anaconda.Apache Spark clusters in HDInsight include Anaconda libraries. Também inclui a biblioteca scikit-learn para aprendizado de máquina.It also includes the scikit-learn library for machine learning. A biblioteca também inclui vários conjuntos de dados que você pode usar para criar aplicativos de exemplo diretamente de um bloco de anotações do Jupyter.The library also includes various data sets that you can use to build sample applications directly from a Jupyter notebook. Para obter exemplos sobre como usar a biblioteca scikit-learn, consulte https://scikit-learn.org/stable/auto_examples/index.html.For examples on using the scikit-learn library, see https://scikit-learn.org/stable/auto_examples/index.html.

Limpar recursosClean up resources

Se não for continuar a usar este aplicativo, exclua o cluster que criou seguindo estas etapas:If you're not going to continue to use this application, delete the cluster that you created with the following steps:

  1. Entre no Portal do Azure.Sign in to the Azure portal.

  2. Na caixa Pesquisar na parte superior, digite HDInsight.In the Search box at the top, type HDInsight.

  3. Selecione Clusters do HDInsight em Serviços.Select HDInsight clusters under Services.

  4. Na lista de clusters do HDInsight exibida, selecione ao lado do cluster que você criou para este tutorial.In the list of HDInsight clusters that appears, select the ... next to the cluster that you created for this tutorial.

  5. Selecione Excluir.Select Delete. Selecione Sim.Select Yes.

Excluir um cluster HDInsight no portal do AzureAzure portal delete an HDInsight cluster

Próximas etapasNext steps

Neste tutorial, você aprendeu a usar o Jupyter Notebook para criar um aplicativo de aprendizado de máquina do Apache Spark para o Azure HDInsight.In this tutorial, you learned how to use the Jupyter Notebook to build an Apache Spark machine learning application for Azure HDInsight. Vá para o próximo tutorial para saber como usar IntelliJ IDEA para trabalhos do Spark.Advance to the next tutorial to learn how to use IntelliJ IDEA for Spark jobs.