如何进行scala和java混合开发打包?
首先创建maven工程,在pom.xml添加一下依赖
1.8
UTF-8
3.8.1
1.6.4
3.1
2.11.8
2.3.2
org.scala-lang
scala-library
${scala.version}
org.slf4j
slf4j-api
${slf4j-api.version}
org.slf4j
slf4j-log4j12
1.7.25
org.apache.maven.plugins
maven-compiler-plugin
3.6.1
1.7
1.7
net.alchim31.maven
scala-maven-plugin
3.2.2
org.apache.maven.plugins
maven-jar-plugin
3.0.2
true
lib/
spark.example.Main
org.apache.maven.plugins
maven-dependency-plugin
3.0.0
package
copy-dependencies
${project.build.directory}/lib
其中mainClass是最后打包的jar包的主函数,通常是包含main方法的scala类,你也可以不指定。
打包命令用mvn clean scala:compile package
打包之后在jar同目录下会有./lib子目录,包含scala-library-2.11.8.jar等依赖包都会在该目录。
如果依赖包在其他目录,也可以用命令:、
java -Djava.ext.dirs=c:\libs -jar my-snapshot.jar
来执行。其中-Djava.ext.dirs=c:\libs指定了依赖包路径为c:\libs,你可以换成自己的目录。
(1)读本地文件示例
var file = "C:\\github\\data\\sparkdata.txt"
val fileSrc = scala.io.Source.fromFile(file)
fileSrc.getLines().foreach(println)
(2)Spark示例
/**
* 打印文件内容
*/
val conf = new SparkConf().setAppName("Spark example").setMaster("local");
val sc = new SparkContext(conf);
var file = "file:///C:\\github\\data\\sparkdata.txt"
var fileRdd = sc.textFile(file, 1)
println("#len:", fileRdd.count())
控制日志级别
spark程序跑起来一堆日志,看的心烦,这里介绍简单的控制日志输出的方法
hadoop.root.logger=ERROR, console
log4j.rootLogger = ERROR, console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.target=System.out
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p %c{2}: %m%n
# apache
log4j.logger.org.apache.hadoop.util.Shell= off
其中log4j.logger.org.apache.hadoop.util.Shell= off是控制org.apache.hadoop.util.Shell类的日志不打印,windows下hadoop用到winutils.exe文件,找不到就会报错,但不影响跑程序,干脆关掉它的日志。