2017-06-30 2 views
4

Wie Titel möchte ich eine Berechnung an einen Spark Cluster (local/HDInsight in Azure) anfordern und die Ergebnisse aus einer C# -Anwendung zurück.Senden Sie einen Spark-Job von C# und Ergebnisse

I bestätigte die Existenz von Livius die ich verstehe eine REST-API-Anwendung ist auf der Oberseite der Spark-Sitzung es abzufragen, und ich habe nicht einen Standard C# API Paket gefunden. Ist das das richtige Werkzeug für den Job? Fehlt nur eine bekannte C# API?

Der Spark- Cluster benötigt Azure Cosmos DB zugreifen, deshalb muss ich in der Lage, einen Job mit dem Anschluss jar Bibliothek (oder dessen Pfad auf dem Cluster-Treiber), um für Spark einreichen zu lesen Daten von Cosmos.

+0

Haben Sie Mobius überprüft? –

+0

@ T.Gawęda Ich habe zwar, aber es sieht für mich eher eine Möglichkeit aus, Spark-Jobs in C# zu schreiben als eine API zum Aufruf und zum Abrufen von Ergebnissen. Hat es diesen Nutzen auch? –

+0

Ich weiß es nicht, um ehrlich zu sein. Ich erkannte nur Spark + C# = Mobius von Databricks post;) –

Antwort

2

Als .NET Funken Steckerdaten abfragen schien es nicht zu existieren Ich schrieb ein

https://github.com/UnoSD/SparkSharp

Es ist nur eine schnelle Umsetzung, aber es hat auch eine Möglichkeit des Abfragens Cosmos DB mit Spark-SQL

Es ist nur ein C# Client für Livy aber es sollte mehr als genug sein.

using (var client = new HdInsightClient("clusterName", "admin", "password")) 
using (var session = await client.CreateSessionAsync(config)) 
{ 
    var sum = await session.ExecuteStatementAsync<int>("val res = 1 + 1\nprintln(res)"); 

    const string sql = "SELECT id, SUM(json.total) AS total FROM cosmos GROUP BY id"; 

    var cosmos = await session.ExecuteCosmosDbSparkSqlQueryAsync<IEnumerable<Result>> 
    (
     "cosmosName", 
     "cosmosKey", 
     "cosmosDatabase", 
     "cosmosCollection", 
     "cosmosPreferredRegions", 
     sql 
    ); 
} 
1

Wenn Ihr nur nach einer Möglichkeit, Ihre Funken Cluster mit SparkSql abzufragen dann ist dies ein Weg, um es von C# zu tun:

https://github.com/Azure-Samples/hdinsight-dotnet-odbc-spark-sql/blob/master/Program.cs

Die Konsole App einen ODBC-Treiber installiert sein muss. Sie können das hier finden:

https://www.microsoft.com/en-us/download/details.aspx?id=49883

Auch die Konsolenanwendung hat einen Fehler: die folgende Zeile in den Code nach dem Teil, in dem die Verbindungszeichenfolge erzeugt wird. Unmittelbar nach dieser Zeile:

connectionString = GetDefaultConnectionString(); 

diese Zeilen hinzufügen

connectionString = connectionString + "DSN=Sample Microsoft Spark DSN"; 

Wenn Sie den Namen des DSN ändern, wenn Sie die Funken ODBC-Treiber installieren, müssen Sie den Namen in der obigen Zeile ändern, dann .

Da Sie auf Daten von Cosmos DB zugreifen müssen, könnten Sie ein Jupyter Notebook in Ihrem Cluster öffnen und Daten in Spark aufnehmen (erstellen Sie dort eine permanente Tabelle Ihrer Daten) und anschließend diese Konsolenanwendung/Ihre C# -App verwenden diese Daten.

Wenn Sie einen Spark-Job in scala/python geschrieben haben und ihn von einer C# -App einreichen müssen, dann ist LIVY der beste Weg. Ich bin mir nicht sicher, ob Mobius das unterstützt.

+0

Die Abfrage wird sich ständig ändern, also glaube ich nicht, dass ich es in Jupyter einrichten und dann mit dem ODBC-Treiber abfragen kann, was Sie vorschlagen (eine permanente Tabelle) ist statischer, habe ich recht? Ich vermute, es wird auch im Speicher gehalten und muss bei Neustart/Datenänderungen (?) Neu erstellt werden, wenn dies der Fall ist, wird es nicht geeignet sein. –

+0

@stfano Ihre Tabelle kann immer mit neuen Daten angehängt werden. Wenn Ihre Tabelle zwischengespeichert ist, können Sie den Cache aktualisieren. Erstellen erste Tabelle: parquet_reader.write.saveAsTable ("pTable") auf den Tisch Anfügen: new_parquet.write.saveAsTable ("pTable", mode = 'append') Auch können Sie Ihre Abfrage ständig ändern. Sie müssen den Git-Hub-Code ein wenig ändern, aber Sie können dynamische Abfragen durchführen lassen. –

-1

Nein, C# ist nicht das Werkzeug, das Sie wählen sollten, wenn Sie mit Spark arbeiten möchten! Allerdings, wenn Sie wirklich wollen versuchen, den Job wit es, wie oben erwähnt Mobius https://github.com/Microsoft/Mobius

Funke hat 4 Hauptsprachen und API-s für sie: Scala, Java, Python, R. Wenn Sie suchen eine Sprache In der Produktion würde ich die R API nicht vorschlagen. Die anderen 3 funktionieren gut.

Für Cosmo DB-Verbindung würde ich vorschlagen: https://github.com/Azure/azure-cosmosdb-spark

Verwandte Themen