现在大数据相关服务,越来越倾向于使用scala语言,scala函数式编程的优势我不多赘述。最明显的一个优点,代码简洁。看个WordCount实现对比:

Java版WordCount
 ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();

 DataSet<String> text = env.readTextFile("/path/to/file");

 DataSet<Tuple2<String, Integer>> counts =
// split up the lines in pairs (2-tuples) containing: (word,1)
text.flatMap(new Tokenizer())
// group by the tuple field "0" and sum up tuple field "1"
.groupBy()
.sum(); counts.writeAsCsv(outputPath, "\n", " "); // User-defined functions
public static class Tokenizer implements FlatMapFunction<String, Tuple2<String, Integer>> { @Override
public void flatMap(String value, Collector<Tuple2<String, Integer>> out) {
// normalize and split the line
String[] tokens = value.toLowerCase().split("\\W+"); // emit the pairs
for (String token : tokens) {
if (token.length() > ) {
out.collect(new Tuple2<String, Integer>(token, ));
}
}
}
}
scala版WordCount
 val env = ExecutionEnvironment.getExecutionEnvironment

 // get input data
val text = env.readTextFile("/path/to/file") val counts = text.flatMap { _.toLowerCase.split("\\s+") filter { _.nonEmpty } }
.map ( (_, ) )
.groupBy()
.sum() counts.writeAsCsv(outputPath, "\n", " ")
如何搭建开发环境呢?
这里介绍一下主要关注的点。
  • 版本匹配
idea和scala的版本匹配有比较大的耦合,具体如何对应需要确认一下。根据flink的scala版本选定要安装的scala sdk,flink使用的scala sdk是2.12,所以我这里选择的sdk版本是2.12.8。
  • 安装scala plugin
 
  • 设置Library
创建flink maven工程后,右键工程打开module setting,在Libraries中下载所需版本的scala sdk,选择下载并等待下载成功。
  • 避免多版本sdk冲突
确认安装成功,如果存在其他版本的scala sdk,删除掉
 
Global Libraries
Global Libraries中,同样选中所需的scala sdk,否则compile可能出错,类似这样的错误compiler error
  • maven依赖
使用flink scala版本的包依赖,官方的例子用的java版本依赖,会导致写scala调用一些flink api出现语法错误。
 
 <version>1.0-SNAPSHOT</version>
<dependencies>
<!-- https://mvnrepository.com/artifact/org.apache.flink/flink-streaming-scala -->
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-streaming-scala_2.</artifactId>
<version>1.9.</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.flink/flink-scala -->
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-scala_2.</artifactId>
<version>1.9.</version>
</dependency>
</dependencies>
这样代码可以正常在IDEA里面跑了。
 
 
如果创建时找不到scala的文件
 
需要导入scala的sdk,忘了说了,别忘了装好1.8的java的sdk
 
 
 
 import org.apache.flink.api.scala.ExecutionEnvironment
object WordCountBatch {
def main(args: Array[String]): Unit = { val inputPath = "D:\\data\\11.txt"
// val env = StreamExecutionEnvironment.getExecutionEnvironment
val env = ExecutionEnvironment.getExecutionEnvironment import org.apache.flink.api.scala._
val text = env.readTextFile(inputPath)
val counts = text.flatMap(_.split("\\W+"))
.filter(_.nonEmpty)
.map((_,))
.groupBy()
.sum() counts.writeAsCsv("D:\\data\\output6").setParallelism()
env.execute("batch wordCount")
} }

Flink开发-IDEA scala开发环境搭建的更多相关文章

  1. iOS开发——实战OC篇&环境搭建之Xib(玩转UINavigationController与UITabBarController)

    iOS开发——实战OC篇&环境搭建之Xib(玩转UINavigationController与UITabBarController)   前面我们介绍了StoryBoard这个新技术,和纯技术 ...

  2. iOS开发——实战OC篇&环境搭建之纯代码(玩转UINavigationController与UITabBarController)

    iOS开发——实战OC篇&环境搭建之纯代码(玩转UINavigationController与UITabBarController)   这里我们就直接上实例: 一:新建一个项目singleV ...

  3. [置顶] Django 微信开发(一)——环境搭建

    Django 微信开发(一)——环境搭建 随着移动互联网时代的到来,微信——一个改变着我们生活的产品悄悄走近了我们的生活.我们不得不觉得自己很幸运,自己能在这个世界上遇到像QQ.微博.微信这样优秀的产 ...

  4. 手把手教你君正X2000开发板的OpenHarmony环境搭建

    摘要:本文主要介绍基于君正X2000开发板的OpenHarmony环境搭建以及简单介绍网络配置情况 本文分享自华为云社区<君正X2000开发板的OpenHarmony环境搭建>,作者: 星 ...

  5. scala lift环境搭建

    Intellij IDEA + scala插件 工欲善其事,必先利其器! 学习scala已经有一段时间了,对scala这门语言爱不释手,但同时也为scala糟糕的IDE工具支持感到懊恼(我是一个100 ...

  6. Android开发之基于AndroidStudio环境搭建和工程创建

    断断续续的学习安卓也有一段时间了.因为之前是搞iOS开发的, 之前有关iOS的博客请看<我的iOS开发系列博文>.<我的Objective-C系列文章>和<窥探Swift ...

  7. Android开发之百度地图--环境搭建

    这篇文章总结自极客学院张浩老师的android教学课程,在此对张浩老师和崔爽老师表示非常感谢. (一)基础知识 在申请百度地图开发密钥的时候需要用到数字签名证书的内容,所以这里先对此做一下介绍. (1 ...

  8. 【Android开发】 第一课 环境搭建教程

    Windows 开发环境部署: Android Studio 中文社区:http://www.android-studio.org/ 本教程将分为五个步骤来完成Android开发环境的部署. 第一步: ...

  9. Android NDK 开发(一)--环境搭建【转】

    转载请注明出处:http://blog.csdn.net/allen315410/article/details/41800955 Android下的NDK开发是Android开发中不可或缺的一部分, ...

随机推荐

  1. Oracle如何杀同库不同实例的会话

    今天处理了一个生产上的问题,主要就是杀会话, 生产环境是Oracle11gR2 RAC:有同事开发报表,报表工具连接到数据库上特别嚣张,把内存pin住: Select s.INST_ID, s.Mac ...

  2. Shell内置命令let

  3. redis Hash相关命令

  4. KiCAD差分布线

    KiCAD差分布线方法 KiCAD在进行差分布线的时候,会自动按照网路名称生成差分对,所以差分对的名称必须是以_P_N或+/-结束,这样才能找到一对差分对,比如说CAN网络,可以定义为CAN_P/CA ...

  5. linux下nano命令大全

    nano是一个字符终端的文本编辑器,有点像DOS下的editor程序.它比vi/vim要简单得多,比较适合Linux初学者使用.某些Linux发行版的默认编辑器就是nano. nano命令可以打开指定 ...

  6. 面试之加分项vue(没看懂,。。。。)

    对大部分人来说,掌握Vue.js基本的几个API后就已经能够正常地开发前端网站.但如果你想更加高效地使用Vue来开发,成为Vue.js大师,那下面我要传授的这五招你一定得认真学习一下了.在面试过程很多 ...

  7. vue中key的作用

    1.v-if中用key管理可复用的元素  Vue 会尽可能高效地渲染元素,通常会复用已有元素而不是从头开始渲染.这么做,除了使 Vue 变得非常快之外,还有一些有用的好处.例如,如果你允许用户在不同的 ...

  8. 71 Serializable(序列化和反序列化)

    对象的输出流:ObjectOutputStream  把对象输出到文件存储起来,我们称作为序列化对象的输入流:ObjectInputStream   把对象从文件中读取出来,我们称作为反序列化 Obj ...

  9. 基于.Net4.0实现 ToastNotification

    基于.Net4.0实现 ToastNotification Windows更新之路的特色之一就是消息提示由气泡变成了通知窗口,效果简直不要太好.最近公司有这方面的需求,需要在xp,win7系统上给出提 ...

  10. css盒模型宽高混合计算calc

    例如: .element{ width:calc(expression); } 兼容性:在IE9+.FF4.0+.Chrome19+.Safari6+都得到了较好支持,但是在移动端的支持不是很好. 其 ...