微软发布.NET版本的Spark,高效而强大

分享 未结
1 1 0 7
小编 2019-04-28发布
收藏 点赞
来源: 虫虫安全

昨天看个帖子微软市值超过1万亿美刀,凭什么?我们可以找出很多理由,但是我认为和阿三CEO的开源战略关系很大。从开源.net到WSL到微软云微软从昔日的开源死敌,到今天的怀抱开源。日前在Spark + AI峰会上,微软发布了开源的.NET for Apache Spark,从而在大数据领域又添加了一枝华章。本文虫虫就给大家介绍一下个项目。

概述

我们以前也介绍过,Apache Spark是Apache基金会旗下的时下最流行的开源分布式内存式大数据处理引擎。 Spark可用于处理批量数据,实时数据流,支持机器学习和即时数据查询。

.NET for Apache Spark项目主要用于创建跨Spark API的Spark原生操作库,为.net开发人员进行大数据分析提供方便。此前Spark官方支持Scala,Java,R和Python,至此又增加了.net。


.NET for Apache Spark将做为.NET Foundation开源自项目发布,项目已经通过Github发布,可以通过Github获取所有的源码(仓库为github:/dotnet/spark)。

介绍

.NET for Apache Spark为.net应用提供了原生的高性能API,他打包了Spark操作操作层上,可以为多种语言提供高性能访问类库,可以支持C#和F#等.net语言。


通过.NET API,我们可以高效访问Apache Spark的所有组件,包括Spark SQL,DataFrames,Streaming,MLLib等。


.NET for Apache Spark符合.NET标准,遵循.NET API的正式规范,我们在.NET代码中随时引入,插拔式的插入,非常容易扩展。现有.net项目和代码,编码习惯等都可以无缝引入到.NET for Apache Spark的项目开。基于.NET Standard 2.0,可以括平台在Linux,macOS和Windows上使用,还支持云架构,微软云Azure HDInsight中已经默认启用,也可以安装在Azure Databricks等中。

实例入门

.NET for Apache Spark的使用需要预装.net core和Spark包括:

.NET Core 2.1 SDK

Java 1.8

Apache Spark 2.4.1

Microsoft.Spark.Worker

安装设置好以上软件后,就可以开始Spark应用的开发了,本我们提供两个简单实例分别说明在C#和F#的应用。

C# 实例:

//创建一个Spark session

var spark = SparkSession

.Builder()

.AppName("word_count_sample")

.GetOrCreate();

//创建一个数据框

DataFrame dataFrame = spark.Read().Text("input.txt");

//操纵和查看数据

var words = dataFrame.Select(Split(dataFrame["value"], " ").Alias("words"));

words.Select(Explode(words["words"])

.Alias("word"))

.GroupBy("word")

.Count()

.Show();


F#:实例

//创建一个Spark session

let spark =

SparkSesstion.Builder()

.AppName("word_count_sample")

.GetOrCreate()

//创建一个数据框

let df = spark.Read().Text("input.txt")

let words = df.Select(Split(df.["value"], " ").Alias("words")

words.Select(Explode(words["words"]).Alias("word"))

.GroupBy("word")

.Count()


性能分析

数据分析很重要的一个方面就能高性能性操作和分析。.NET for Apache Spark在发布之前就做了很多的系能测试,官方对其预览版本进行了TPC-H基准测试,结果显示.NET for Apache Spark系能表象良好。官方进行的TPC-H基准包含一套面向业务的查询。下面的图例说明了在TPC-H查询集上.NET Core与Python和Scala的性能对比。


上图显示了.NET for Apache Spark,Python及Scala在Apache Spark上每个查询性能。 .NET for Apache Spark性能表现良好。此外,在UDF性能至关重要的情况下,例如查询1,其中在JVM和CLR .NET之间传递3B行非字符串数据,Apache Spark比Python快2倍。

TPC-H基准测试中所有22个查询的总执行时间(秒)(越低越好)结果如下图所示。


数据源自TPC-H基准测试的内部运行,在Ubuntu 16.04上使用热执行。

当然由于基准测试使用的是.NET for Apache Spark预览,没有很多的优化,正式版本的性能会有更进一步的优化和提高。

发展展望

正式发布后Visual Studio Code才算是踏上万里长征的第一步,官方也提供了以后发展路线图,提供值得期望的有:

简化入门体验,文档和示例

与Visual Studio,Visual Studio Code,JupyterNote等开发人员工具进行有机集成

.NET支持用户定义的聚合函数

提供C#和F#的常用的API和实例用于(例如,使用LINQ进行查询)

提供Azure Databricks,Kubernetes等开箱即用的支持。

为Spark Spark构建.NET for Spark Spark。

回帖
  • 消灭零回复