Zelfstudie: Maak een Apache Spark machine learning-toepassing in Azure HDInsightTutorial: Build an Apache Spark machine learning application in Azure HDInsight

In deze zelfstudie leert u hoe u het Jupyter-notebook gebruikt voor het bouwen van een Apache Spark-toepassing voor Machine Learning voor 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 is de schaalbare bibliotheek voor machine learning van Spark die bestaat uit veelgebruikte leeralgoritmen en hulpprogramma's, zoals voor classificatie, regressie, clustering, gezamenlijke filterfuncties, dimensionaliteitsvermindering, evenals onderliggende optimalisatieprimitieven.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.

In deze zelfstudie leert u het volgende:In this tutorial, you learn how to:

  • Een Apache Spark-toepassing voor Machine Learning ontwikkelenDevelop an Apache Spark machine learning application

VereistenPrerequisites

Informatie over de gegevenssetUnderstand the data set

De toepassing gebruikmaakt van het voorbeeld HVAC.csv gegevens die beschikbaar is op alle clusters standaard.The application uses the sample HVAC.csv data that is available on all clusters by default. Het bestand bevindt zich op \HdiSamples\HdiSamples\SensorSampleData\hvac.The file is located at \HdiSamples\HdiSamples\SensorSampleData\hvac. De gegevens hebben betrekking op de gewenste temperatuur en de werkelijke temperatuur in enkele gebouwen waarin HVAC-systemen zijn geïnstalleerd.The data shows the target temperature and the actual temperature of some buildings that have HVAC systems installed. De kolom System bevat de id van het betreffende systeem en de kolom SystemAge geeft het aantal jaren aan dat het HVAC-systeem wordt gebruikt in het gebouw.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. Aan de hand van deze gegevens kunt u voorspellen of het in een gebouw warmer of kouder zal zijn gebaseerd op de richttemperatuur, een systeem-id en een leeftijd van het systeem.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.

Momentopname van de gegevens die worden gebruikt voor het voorbeeld van machine learning met SparkSnapshot of data used for Spark machine learning example

Een Spark-toepassing voor machine learning ontwikkelen met Spark MLibDevelop a Spark machine learning application using Spark MLlib

In deze toepassing gebruikt u een ML-pijplijn van Spark om een documentclassificatie uit te voeren.In this application, you use a Spark ML pipeline to perform a document classification. ML-pijplijnen bieden een uniforme set van algemene API's die zijn gebaseerd op DataFrames waarmee gebruikers praktische pijplijnen voor machine learning kunnen maken en afstemmen.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. In de pijplijn splitst u het document op in woorden, converteert u de woorden naar een numerieke functievector en bouwt u ten slotte een voorspellend model met behulp van de functievectoren en labels.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. Voer de volgende stappen uit om de toepassing te maken.Perform the following steps to create the application.

  1. Maak een Jupyter-notebook met behulp van de PySpark-kernel.Create a Jupyter notebook using the PySpark kernel. Zie Een Jupyter-notebook maken voor de instructies.For the instructions, see Create a Jupyter notebook.

  2. Importeer de typen die nodig zijn voor dit scenario.Import the types required for this scenario. Plak het volgende codefragment in een lege cel en druk op 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. Laad de gegevens (hvac.csv), parseer de gegevens en gebruik ze voor het trainen van het model.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()
    

    In het codefragment definieert u een functie waarmee de werkelijke temperatuur wordt vergeleken met de gewenste temperatuur.In the code snippet, you define a function that compares the actual temperature with the target temperature. Als de werkelijke temperatuur hoger is, is het warm in het gebouw, aangegeven door de waarde 1.0.If the actual temperature is greater, the building is hot, denoted by the value 1.0. Anders is het koud in het gebouw, wat wordt aangegeven door de waarde 0.0.Otherwise the building is cold, denoted by the value 0.0.

  4. Configureer de pijplijn voor de Spark-toepassing voor machine learning. Deze bestaat uit drie fasen: tokenizer, hashingTF en 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])
    

    Zie Apache Spark machine learning pipeline (Pijplijn voor machine learning van Apache Spark) voor meer informatie over pijplijnen en hoe ze werken.For more information about pipeline and how it works, see Apache Spark machine learning pipeline.

  5. Koppel de pijplijn aan het trainingsdocument.Fit the pipeline to the training document.

    model = pipeline.fit(training)
    
  6. Controleer het trainingsdocument om de voortgang met de toepassing te controleren.Verify the training document to checkpoint your progress with the application.

    training.show()
    

    De uitvoer is vergelijkbaar met: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|
    +----------+----------+-----+
    

    Vergelijk de uitvoer met het onbewerkte CSV-bestand.Comparing the output against the raw CSV file. De eerste rij van het CSV-bestand bevat bijvoorbeeld deze gegevens:For example, the first row the CSV file has this data:

    Momentopname van uitvoergegevens voor het voorbeeld van een Spark-toepassing voor machine learningOutput data snapshot for Spark machine learning example

    U ziet hoe de werkelijke temperatuur lager is dan de richttemperatuur, wat betekent dat het koud is in het gebouw.Notice how the actual temperature is less than the target temperature suggesting the building is cold. In de uitvoer van de training is de waarde voor label in de eerste rij daarom 0.0, wat betekent dat het niet warm is in het gebouw.Hence in the training output, the value for label in the first row is 0.0, which means the building is not hot.

  7. Bereid een gegevensset voor die kan worden uitgevoerd op het getrainde model.Prepare a data set to run the trained model against. Hiervoor geeft u een systeem-id en leeftijd van het systeem door (aangeduid als SystemInfo in de trainingsuitvoer), waarna het model voorspelt of het in het gebouw met die systeem-id en die leeftijd warmer (aangeduid met 1.0) of koeler (aangeduid met 0.0) zal zijn.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. Genereer als laatste voorspellingen op basis van de testgegevens.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
    

    De uitvoer is vergelijkbaar met: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]))
    

    In de eerste rij in de voorspelling kunt u zien dat voor een HVAC-systeem met de id 20 en een leeftijd van 25 jaar, het warm is in het gebouw (prediction=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). De eerste waarde voor DenseVector (0.49999) komt overeen met de voorspelling 0.0 en de tweede waarde (0.5001) komt overeen met de voorspelling 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. In de uitvoer toont het model prediction=1.0, ook al is de tweede waarde maar een fractie hoger.In the output, even though the second value is only marginally higher, the model shows prediction=1.0.

  9. Sluit het notebook om de resources vrij te geven.Shut down the notebook to release the resources. Selecteer hiervoor Sluiten en stoppen in het menu Bestand van het notebook.To do so, from the File menu on the notebook, select Close and Halt. Met deze actie wordt het notebook afgesloten en gesloten.This action shuts down and closes the notebook.

scikit-learn-bibliotheek van Anaconda gebruiken voor een Spark-toepassing voor machine learningUse Anaconda scikit-learn library for Spark machine learning

Apache Spark-clusters in HDInsight bevatten Anaconda-bibliotheken,Apache Spark clusters in HDInsight include Anaconda libraries. waaronder de bibliotheek scikit-learn voor machine learning.It also includes the scikit-learn library for machine learning. De bibliotheek bevat ook verschillende gegevenssets die u kunt gebruiken om rechtstreeks vanuit een Jupyter-notebook voorbeeldtoepassingen te bouwen.The library also includes various data sets that you can use to build sample applications directly from a Jupyter notebook. Zie https://scikit-learn.org/stable/auto_examples/index.html voor voorbeelden van het gebruik van de bibliotheek scikit-learn.For examples on using the scikit-learn library, see https://scikit-learn.org/stable/auto_examples/index.html.

Resources opschonenClean up resources

Als u niet verder om door te gaan om deze toepassing te gebruiken, verwijdert u het cluster dat u hebt gemaakt met de volgende stappen uit:If you're not going to continue to use this application, delete the cluster that you created with the following steps:

  1. Meld u aan bij Azure Portal.Sign in to the Azure portal.

  2. Typ HDInsight in het Zoekvak bovenaan.In the Search box at the top, type HDInsight.

  3. Selecteer onder Services de optie HDInsight-clusters.Select HDInsight clusters under Services.

  4. Selecteer in de lijst van HDInsight-clusters die wordt weergegeven, de ... naast het cluster dat u voor deze zelfstudie hebt gemaakt.In the list of HDInsight clusters that appears, select the ... next to the cluster that you created for this tutorial.

  5. Selecteer Verwijderen.Select Delete. Selecteer Ja.Select Yes.

Een HDInsight-cluster verwijderenDelete an HDInsight cluster

Volgende stappenNext steps

In deze zelfstudie hebt u geleerd hoe u de Jupyter-Notebook gebruikt om een ml-toepassing voor Azure HDInsight Apache Spark-machine te maken.In this tutorial, you learned how to use the Jupyter Notebook to build an Apache Spark machine learning application for Azure HDInsight. Ga naar de volgende zelfstudie voor meer informatie over het gebruik van IntelliJ IDEA voor Spark-taken.Advance to the next tutorial to learn how to use IntelliJ IDEA for Spark jobs.