6

根据标题,我想请求对Spark集群(Azure 中的本地/HDInsight)进行计算,并从 C# 应用程序中获取结果。

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

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

4

4 回答 4

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
    );
}
于 2017-07-11T11:42:32.060 回答
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 驱动程序时更改了 DSN 的名称,则需要在上面的行中更改名称。

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

如果您有一个用 scala/python 编写的 spark 作业并且需要从 C# 应用程序提交它,那么我猜 LIVY 是最好的方法。我不确定莫比乌斯是否支持这一点。

于 2017-06-30T20:20:55.117 回答
0

微软刚刚通过 .NET Foundation OSS 发布了一个基于数据框的 .NET 对 Apache Spark 的支持。有关详细信息,请参阅http://dot.net/sparkhttp://github.com/dotnet/spark 。如果您选择正确的 HDP/Spark 版本(当前为 3.6 和 2.3,很快还会有其他版本),它现在默认在 HDInsight 中可用。

于 2019-06-01T01:14:16.683 回答
-1

更新:

很久以前,我对这个问题明确表示不。然而时代变了,微软做出了努力。请查看https://dotnet.microsoft.com/apps/data/spark

https://github.com/dotnet/spark

    // Create a Spark session
    var spark = SparkSession
    .Builder()
    .AppName("word_count_sample")
    .GetOrCreate();

现在用 C# 编写 spark 应用程序就是这么简单!

过时的:

不,如果您想使用 Spark,C# 不是您应该选择的工具!但是,如果你真的想用它来完成这项工作,请尝试上面提到的 Mobius https://github.com/Microsoft/Mobius

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

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

于 2017-07-10T20:13:57.357 回答