31.用mapreduce如何解决两组数据的归并排序问题
数据a:
0 java
2 java
4 java
...
98 java
100 java
数据b:
1 hadoop
3 hadoop
5 hadoop
...
97 hadoop
99 hadoop
###-map_sort-###
import sys
base_count = 10000
for line in sys.stdin:
ss = line.strip().split('\t')
key = ss[0]
val = ss[1]
new_key = base_count + int(key)
red_idx = 1
if new_key < (10100 + 10000) / 2:
red_idx = 0
print "%s\t%s\t%s" % (red_idx, new_key, val)
###-red_sort-###
import sys
for line in sys.stdin:
idx_id, key, val = line.strip().split('\t')
print '\t'.join([key, val])
32.shell脚本通常有哪些类型
通常写一个shell脚本都要在第一行注明使用什么解释器来解释,即写成:#!/bin/bash
这样的形式,意思是告诉系统要使用/bin/bash这个解释器来解释下面的语句。shell的脚本一般用.sh作为后缀,只要你写的脚本的第一行有#!/bin/bash或者是其他的解释器,如#!/bin/csh,执行该脚本时系统会使用该注明的解释器来解释。
.csh脚本使用csh这个shell解释器来解释。
.sh脚本使用bash或sh解释器来解释。
.py则是使用python来解释。
33.Spark RDD、DataFrame和DataSet的区别
RDD
优点:
1.编译时类型安全,编译时就能检查出类型错误
2.面向对象的编程风格,直接通过类名点的方式来操作数据
缺点:
1.序列化和反序列化的性能开销,无论是集群间的通信,还是IO操作都需要对对象的结构和数据进行序列化和反序列化.
2.GC的性能开销,频繁的创建和销毁对象,势必会增加GC
DataFrame
DataFrame引入了schema和off-heap
•schema: RDD每一行的数据,结构都是一样的.这个结构就存储在schema中. Spark通过schame就能够读懂数据,因此在通信和IO时就只需要序列化和反序列化数据,而结构的部分就可以省略了。
•off-heap:意味着JVM堆以外的内存,这些内存直接受操作系统管理(而不是JVM)。Spark能够以二进制的形式序列化数据(不包括结构)到off-heap中,当要操作数据时,就直接操作off-heap内存.由于Spark理解schema,所以知道该如何操作。
off-heap就像地盘, schema就像地图, Spark有地图又有自己地盘了,就可以自己说了算了,不再受JVM的限制,也就不再收GC的困扰了。
通过schema和off-heap, DataFrame解决了RDD的缺点,但是却丢了RDD的优点。DataFrame不是类型安全的, API也不是面向对象风格的。
DataSet
DataSet结合了RDD和DataFrame的优点,并带来的一个新的概念Encoder
当序列化数据时, Encoder产生字节码与off-heap进行交互,能够达到按需访问数据的效果,而不用反序列化整个对象. Spark还没有提供自定义Encoder的API,但是未来会加入.
以上.
听说,爱点赞的人运气都不会太差哦
如果有任何意见和建议,也欢迎在下方留言~
关注这个公众号,定期会有大数据学习的干货推送给你哦~
领取专属 10元无门槛券
私享最新 技术干货