模仿开发者提供的Simple Examples of EasyML中单机filesplit示例,使用scala语言编写单机程序,读取文件中存储的矩阵,判断矩阵有几行,奇数行输出1,偶数行输出0,矩阵的格式为:
1,22,3,#
2,11,5,#
因此只需读取文件中的行,拼接成字符串,然后判断字符串中“#”的个数即可。 测试平台是在线版本:BDAStudio,以上为背景。
因为不想安装IDEA,而本地已有eclipse+maven,因此在eclipse中安装scala插件,通过maven打包jar包。
1.安装scala插件参考:小草君技术专栏
最后一步:run as -->maven build..-->Goals:clean scala:compile compile package
来避免默认的Java编译。
因为导出的jar包在命令行中java -jar xxx.jar
,报错提示xxx.jar中没有主清单属性,经过 @小黑熊 提醒可能是打包方式出现错误。
2.修改pom.xml来规避上述错误,参考博客:Defonds 的专栏,最终解决了问题,
java -jar xxx.jar
不再报错。
3.上传到在线平台BDAStudio,CMD语句为
java -cp xxx.jar checkmatrixrow
因为是单机版程序所以CMD头是Java,分布式程序CMD头为Spark。checkmatrixrow是jar包中checkmatrixrow.class 文件所在的路径+文件名,因为我的checkmatrixrow.class就在jar包的第一层,所以只有文件名。
最后附上写的第一个scala程序源码,配合EML平台使用,仅有一个输入in,即代码中的args(0),EML平台对每个program输入输出机制是第1个接口是args(0),第二个就是args(1),依次类推:
import scala.io.Source
import java.io._
object checkmatrixrow {
def main(args:Array[String]) {
//read operation
var inmatrix=""
val file=Source.fromFile(args(0))
for(line <- file.getLines)
{
inmatrix+=line
}
file.close
//matrix format like 1,2,3,#4,5,6,#
//check the number of '#'
var outflag=""
var numberofchar = inmatrix.length-inmatrix.replace("#","").length
if(numberofchar%2==0){
print("0")
outflag = "0"
}else{
print("1")
outflag = "1"
}
//write operation
//val writer = new PrintWriter(args(1))
//writer.write(outflag)
//writer.close()
}
}