云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

天翼云_数据库更新数据_代金券

小七 141 0

使apachespark更易于在Java和java8中使用

apachespark的主要目标之一是使大数据应用程序更易于编写。Spark在Scala和Python中一直有简洁的API,但是由于缺少函数表达式,它的javaapi非常冗长。通过在Java8中添加lambda表达式,我们更新了Spark的API,以透明地支持这些表达式,同时与旧版本的Java保持兼容。这个新的支持将在ApacheSpark1.0中提供。几个例子下面的例子展示了Java8如何使代码更简洁。在第一个示例中,我们使用Spark的filter和count操作在日志文件中搜索包含"error"的行。代码编写简单,但将函数对象传递给filter却很笨拙:Java 7搜索示例:JavaRDD行=sc.TEXT文件("hdfs://log.txt")。过滤器(新建函数(){公共布尔调用(字符串s){return s.contains("错误");}});长数字错误=行数.count();(如果您是Spark新手,JavaRDD是对象的分布式集合,在本例中是文件中的文本行。我们可以对这些对象应用操作,这些对象将自动在集群中并行化。)使用Java 8,我们可以用内联函数表达式替换函数对象,使代码更加简洁:Java 8搜索示例:JavaRDD行=sc.TEXT文件("hdfs://log.txt").filter(s->s.contains("error"));长数字错误=行数.count();对于更长的项目,收益会变得更大。例如,下面的程序通过获取一个文件(以行集合的形式读取),将每一行拆分为多个单词,然后使用reduce函数对单词进行计数。Java 7字数:JavaRDD行=sc.TEXT文件("hdfs://log.txt");//将每行映射到多个单词JavaRDD单词=线条.平面图(新建FlatMapFunction(){公共Iterable调用(字符串行){返回数组.asList(线.分割(" "));}});//把单词分成(单词,1)对JavaPairRDD one=单词.mapToPair(新建PairFunction(){公共Tuple2调用(字符串w){返回(1,tuplew);}});//分组并按键将对相加以生成计数JavaPairRDD计数=一、还原键(新函数2(){公共整数调用(Integer i1,Integer i2){返回i1+i2;}});counts.saveAsTextFile("hdfs://counts.txt");使用Java 8,我们可以用几行代码编写这个程序:Java 8字数:JavaRDD行=sc.TEXT文件("hdfs://log.txt");爪哇语=线条.平面图(行->数组.asList(线.分割(" ")));JavaPairRDD计数=单词.mapToPair(w->新Tuple2(w,1)).reduceByKey((x,y)->x+y;counts.saveAsTextFile("hdfs://counts.txt");我们很高兴能提供这个功能,因为它为广大开发人员打开了Scala和pythonspark用户所熟悉的简单、简洁的编程风格。可利用性Java8Lambda支持将在5月初发布的ApacheSpark1.0中提供。虽然使用这种语法需要Java8,但是ApacheSpark1.0仍然通过旧的API形式支持旧版本的Java。Lambda表达式只是匿名内部类的简写,因此在任何Java版本中都可以使用相同的API。进一步了解Spark如果您想了解更多关于Spark的信息,官方文档可以帮助您今天开始使用Java、Scala或Python。Spark很容易在你的笔记本电脑上运行,除了下载和解压版本外,没有任何安装。免费试用Databricks。今天就开始吧