目录
六:spark算子reduce,reduceByKey,groupByKey的区别
一:map和mappartitions区别
map是对rdd中的每一个元素进行操作,mapPartitions则是对rdd中每个分区的迭代器进行操作;从性能上看,mappartitions的性能较高,举例来说,如果一个partition中有一万条数据,在使用map的时候,function需要执行和计算1万次;使用mappartitions操作的时候,一个task仅仅会执行一次function。从瓶颈上说,如果一个分区里面数据量过大,比如几百万条,一次传入function以后,内存可能不够,造成内存溢出。开发指导:在内存空间较大的时候建议使用mappartitions
二:map和flatmap区别
区别主要在于操作之后得到的值的区别。例如对array(“a_b”,”c_d”,”e_f”)进行map(split(“_”))和flatmap(split(“_”))。map函数后,RDD的值为 Array(Array("a","b"),Array("c","d"),Array("e","f"))。flatMap函数处理后,RDD的值为 Array("a","b","c","d","e","f")2.5 rdd动作算子也就说flatmap会将其返回的数组全部拆撒,然后合成到一个数组中。
归纳起来就是:从操作上看,flatmap最后会把所有的对象再合成为一个对象;从返回的结果数量上看,map返回的数据对象的个数和原来输入数据是相同的,而flatmap最后就返回一个对象。
三:coalesce在hive和spark中对应的区别
需要注意的是,hive中的SQL是SQL,spark中的api是api,这两种是不同的概念。在写SQL语句的时候coales