用于Apache Spark Preview的Kotlin

2020-08-29 06:19:25

Apache Spark是一个用于大规模分布式数据处理的开源统一分析引擎。在过去的几年中,它已经成为用于处理大量数据的最流行的工具之一。它涵盖了广泛的任务-从数据批处理和简单的ETL(提取/转换/加载)到流和机器学习。

由于Kotlin与Java的互操作性,Kotlin开发人员已经可以通过Java API使用Apache Spark。然而,这样一来,他们就不能充分利用科特林的潜力,一般的体验也远非一帆风顺。

今天,我们很高兴与大家分享用于Apache Spark的Kotlin API的第一个预览版。该项目在Kotlin和Apache Spark之间添加了一层缺失的兼容性。它允许您使用熟悉的语言特性(如数据类和lambda表达式)编写惯用的Kotlin代码。

With Spark是使用SparkSession的一种简单而优雅的方式,它将自动为您调用块末尾的spk.stop()。您可以将运行Spark可能需要的参数传递给它,例如主位置、日志级别或应用程序名称。它还为本地运行Spark提供了一组方便的默认值。

Val日志文件=";a/path/to/logFile.txt"; With Spark(MASTER=";纱线";,logLevel=SparkLogLevel.DEBUG){ Partk.read().textFile(日志文件).with Cached{ Val Numas=筛选器{it.concludes(";a";)}.count() VAL NUMBS=筛选器{it.concludes(";b";)}.count() Println(";带有a:$Numas的行,带有b:$Numbs";的行;) } }。

上例中的另一个有用函数是with Cached。在其他API中,如果您希望将计算分叉到多个路径中,但只计算一次,则可以调用“cache”方法。但是,这很快就很难跟踪了,您必须记住取消对缓存数据的持久化。否则,您可能会占用比预期更多的内存,甚至会完全损坏东西。WitCached负责跟踪和取消持久化。

Kotlin for Spark将leftJoin、rightJoin和其他别名添加到现有方法中,然而,这些别名在设计上是空安全的。

Fun Main(){ 数据类坐标(Val lon:Double,Val Lat:Double) 数据类城市(VAL名称:字符串,VAL坐标:坐标) 数据类CityPopulation(Val City:String,Val Population:Long) With Spark(appName=";查找要访问的最大城市";){ 具有坐标的VAL城市=dsOf( 城市(";莫斯科";,坐标(37.6155600,55.7522200)), //... ) VAL人口=dsOf( 城市人口(";莫斯科";,11_503_501L), //... ) CitiesWithHarates.rightJoin(Population,citiesWithHarates.ol(";name";)==Population s.ol(";City";)) .filter{(_,citiesPopulation)->; 城市人口.人口>;15_000_000L } .map{(城市,_)->; //此右连接中的城市可能为空! 城市?.坐标 } .filterNotNull() .show() } }

请注意上例中的城市?.坐标线。在此右联接中,城市可能为空。这会在其他JVM Spark API中导致NullPointerException,并且调试问题的根源会相当困难。Kotlin for Apache Spark为您提供了NULL安全保护,您可以方便地过滤出NULL结果。

这个Kotlin for Apache Spark的初始版本支持Apache Spark 3.0,其核心是针对Scala 2.12编译的。

API涵盖了创建最适合批处理ETL的自包含Spark应用程序所需的所有方法。

为了帮助您快速开始使用Kotlin for Apache Spark,我们准备了一份快速入门指南,帮助您设置环境,正确定义项目的依赖关系,并运行第一个用Kotlin编写的自含式Spark应用程序。

我们理解,将任何现有的框架升级到新版本都需要一段时间,Spark也不例外。这就是为什么在下一次更新中,我们将添加对早期Spark版本的支持:2.4.2-2.4.6。

我们还在开发Kotlin Spark shell,这样您就可以享受以交互方式处理数据的乐趣,并使用它执行探索性数据分析。

目前,Spark Streaming和Spark MLlib不在此接口范围内,但我们会密切听取您的反馈,并在我们的路线图中进行相应处理。

在未来,我们希望看到Kotlin以一等公民的身份加入官方的Apache Spark项目。我们相信它可以为Kotlin和Spark社区增加价值。这就是为什么我们开了一个Spark项目改进提案:Kotlin支持Apache Spark。我们鼓励您发表您的意见并加入讨论。

来试试Kotlin的Apache Spark吧,让我们知道你的想法!