微软发布.NET版本的Spark,高效而强大
昨天看个帖子微软市值超过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。
来源:SEO公司