归档: 2017/3

SparkSQL RDD转换DataFrame方法

DataFrame可以创建临时视图,DataFrame相当于关系数据库上的一个表,我们可以利用DataFrame的这个特性,使用SQL语句进行一系列的操作。将SparkRDD转化为DataFram主要有两种方式。第一:通过反射的方式将RDD转换为DataFrame,第二:通过编程的方式将RDD转换为DataFrame

柯里化

概念柯里化(Currying)指的是将原来接受两个参数的函数变成新的接受一个参数的函数的过程。新的函数返回一个以原有第二个参数为参数的函数。定义一个函数1def add(x:Int,y:Int)=x+y 调用时:add(1,2)将函数变形为:1def add(x:Int)(y:Int) = x + y 调用时:add(1)(2)以上的过程就是柯里化

Scala的Symbol类型

相比较于String类型,Symbol类型有两个比较明显的特点:节省内存和快速比较 String的internString类内部维护一个字符串池(strings pool),当调用String的intern()方法时,如果字符串池中已经存在该字符串,则直接返回池中字符串引用,如果不存在,则将该字符串添加到池中,并返回该字符串对象的引用。执行过intern()方法的字符串,我们就说这个字符串被拘禁了(interned)。默认情况下,代码中的字符串字面量和字符串常量值都是被拘禁的,例如:1234String s1 = "abc";String s2 =new String("abc");//返回trueSystem.out.println(s1 == s2.intern()); 同值字符串的intern()方法返回的引用都相同,例如:1234567String s2 = new String("abc");String s3 = new String("abc");//返回trueSystem.out.println(s2.intern() == s3.intern());//返回falseSystem.out.println(s2 == s3);

Spark-zip相关算子

zip 算子zip函数用于将两个RDD组合成key/value形式的RDD,这里默认两个RDD的数量(partitions)以及元素数量都相同,否则将抛出异常java.lang.IllegalArgumentException: Can't zip RDDs with unequal numbers of partitions:函数定义:1def zip[U: ClassTag](other: RDD[U]): RDD[(T, U)] 实例代码:123456789101112val conf = new SparkConf().setMaster("local").setAppName("ZipTest")val sc = new SparkContext(conf)val rdd1=sc.makeRDD(1 to 5,2)val rdd2=sc.makeRDD(Seq("A","B","C","D","E"),2)rdd1.zip(rdd2).foreach(print)//output//(1,A)(2,B)(3,C)(4,D)(5,E)rdd2.zip(rdd1).foreach(print)//output//(A,1)(B,2)(C,3)(D,4)(E,5)

Scala跳出循环的3中方法

Java里经常会用到continue和break,Scala里并没有这俩个语法。介绍三种跳出循环的方式,使用boolean变量、使用return、使用Breaks对象的break方法

Spark 共享变量

共享变量概念默认情况下,如果在一个算子中使用到了一个外部变量,那么这个变量值会被拷贝到每个task任务中。此时每个task都只能操作自己的那份变量副本。如果多个task想要共享变量,这种情况是做不到的。Spark为此提供了两种共享变量,一种是BroadCast Variable(广播变量),另一种是Accumulator(累加变量)。BroadCast会将使用到的变量,仅仅为每个节点拷贝一份,而不是为每个task拷贝一个副本,这样做的好处是优化性能,减少网络传输以及内存消耗。SparkContext.broadCast()方法创建广播变量。用value()方法读取值。Accumulator则可以让多个task共同操作一个变量,变量可以进行累加操作

快学Scala

1.可变参数列表12345678//定义一个函数,可变长度参数 def sum(args:Int*):Int={ var result = 0 for(arg <- args){ result += arg } result }

spark函数-cogroup

cogroup:将多个RDD中同一个Key对应的Value组合到一起。最多可以组合四个RDD。当对应RDD中不存在对应Key的元素(自然就不存在Value了),在组合的过程中将RDD对应的位置设置为CompactBuffer()了,而不是去掉了。实例如下: