从C#提交Spark作业并获得结果

时间:2017-06-30 13:47:41

标签: c# apache-spark hdinsight livy .net-spark

根据标题,我想请求计算 Spark 群集(Azure中的local / HDInsight)并从C#应用程序返回结果。

我承认存在 Livy ,我理解这是一个位于 Spark 之上的REST API应用程序来查询它,我还没有找到标准 C#API 包。这是工作的正确工具吗?它只是缺少一个众所周知的 C#API

Spark 群集需要访问 Azure Cosmos DB ,因此我需要能够提交包含连接器jar库(或其在群集驱动程序上的路径)的作业)以便 Spark Cosmos 中读取数据。

4 个答案:

答案 0 :(得分:4)

作为查询数据的 .NET Spark 连接器似乎不存在我写了一个

https://github.com/UnoSD/SparkSharp

这只是一个快速实现,但它也有一种使用 Spark SQL

查询 Cosmos DB 的方法

这只是 Livy C#客户端,但它应该绰绰有余。

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 :(得分:2)

如果您只想找到一种使用SparkSql查询spark集群的方法,那么这是一种从C#中执行此操作的方法:

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

控制台应用程序需要安装ODBC驱动程序。你可以在这里找到:

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

控制台应用程序也有一个错误:在生成连接字符串的部分之后将此行添加到代码中。 紧接着这一行:

connectionString = GetDefaultConnectionString();

添加此行

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

如果在安装spark ODBC Driver时更改了DSN的名称,则需要在上面的行中更改名称。

由于您需要从Cosmos DB访问数据,您可以在群集上打开Jupyter Notebook并将数据提取到spark(在那里创建一个永久的数据表),然后使用此控制台应用程序/您的c#app查询数据

如果你有一个用scala / python编写的spark作业并且需要从C#app提交它,那么我猜LIVY是最好的方法。我不确定Mobius是否支持。

答案 2 :(得分:0)

Microsoft刚刚通过.NET Foundation OSS发布了对Apache Spark的基于数据帧的.NET支持。有关更多详细信息,请参见http://dot.net/sparkhttp://github.com/dotnet/spark。现在,如果您选择正确的HDP / Spark版本(当前为3.6和2.3,不久之后还将提供其他版本),则默认情况下,它在HDInsight中可用。

答案 3 :(得分:-2)

不,如果您想使用Spark,C#不是您应该选择的工具!但是,如果你真的想做这个工作,那就试试上面提到的Mobius https://github.com/Microsoft/Mobius

Spark有4种主要语言和API-s:Scala,Java,Python,R。 如果您正在寻找生产中的语言,我不建议使用R API。其他3运作良好。

对于Cosmo数据库连接,我建议:https://github.com/Azure/azure-cosmosdb-spark