今天完成了RDD的相关实验还是使用Scala来进行相关的效果,RDD是spark的数据集,通过spark-shell编程我知道了相关spark的语言,还是有很多不足之处。
spark交互式编程相关的就不写了,给出今天我编译的相关独立应用程序编程。
编写独立应用程序实现数据去重
对于两个输入文件 A 和 B,编写 Spark 独立应用程序,对两个文件进行合并,并剔除其中重复的内容,得到一个新文件 C。
源代码:
package ch.Tutorial4 import scala.io.Source import java.io.PrintWriter import java.io.File import Array._ import scala.util.control._ object exercise4_2 { def main(args: Array[String]){ File() } def File(){ val AFile=InFile("A.txt") val BFile=InFile("B.txt") var CFile=concat( AFile, BFile) var CFile2=new Array[String](CFile.size) val loop = new Breaks; for(i<-CFile){ loop.breakable{ for(j<- 0 to CFile2.size-1 ){ if(CFile2(j)!=null){if(i==CFile2(j))loop.break;} else {CFile2(j)=i;loop.break;} } } } outFile(CFile2) } def InFile(path:String) : Array[String] ={ val source = Source.fromFile(path, "UTF-8") val lines = source.getLines().toArray return lines } def outFile(data:Array[String]){ val writer = new PrintWriter(new File("C.txt")) for(i <-data) if(i!=null)writer.println(i) writer.close() } }
生成的文件截图:
A.txt:
B.txt:
生成的C.txt:
编写独立应用程序实现求平均值问题
每个输入文件表示班级学生某个学科的成绩,每行内容由两个字段组成,第一个是学生名字,第二个是学生的成绩;编写 Spark 独立应用程序求出所有学生的平均成绩,并输出到一个新文件中。
源代码:
package ch.Tutorial4 import scala.io.Source import java.io.PrintWriter import java.io.File import Array._ import scala.util.control._ object exercise4_3 { def main(args: Array[String]){ File() } def File(){ val data=InFile("student.txt") var student= ofDim[String](4,2) val loop = new Breaks; var time:Int=0 for(i<-data){ var text=String.valueOf(i); var text2=text.split(" ") loop.breakable{ for(j<- 0 to student.size-1){ if(student(j)(0)==null){student(j)(0)=text2(0);student(j)(1)=text2(1);loop.break;} else{ if(text2(0)==student(j)(0)){student(j)(1)=String.valueOf(student(j)(1).toInt+text2(1).toInt);time+=1} } }} } for(j<-0 to 3){ student(j)(1)=String.valueOf(student(j)(1).toDouble/3) } outFile(student) } def InFile(path:String) : Array[String] ={ val source = Source.fromFile(path, "UTF-8") val lines = source.getLines().toArray return lines } def outFile(data:Array[Array[String]]){ val writer = new PrintWriter(new File("avg.txt")) for(i <-0 to data.size-1) writer.println(data(i)(0)+" "+data(i)(1)) writer.close() } }
截图: