zoukankan      html  css  js  c++  java
  • map与mapPartitions

    区别在于sc.map是将RDD下的所有行数据统计处理。而sc.mapPartitions是按RDD分区进行数据统计处理。

    测试一下:

    val data = sc.parallelize(1 to 6,3)
    def mapTest(param1:Int):Int={
    	println("by map,data:"+param1)
    	param1*2
    }
    
    def mapPartitionsTest(listParam:Iterator[Int]):Iterator[Int]={
    	println("by partition:")
    	var res = for(param<-listParam) yield param*2
    	res
    }
    data.map(mapTest).collect
    data.mapPartitions(mapPartitionsTest).collect
    

    map输出的是6行记录,也就是说一行数据一条记录。

    mapPartitions输出的是3行记录,也就是说一个分区一次处理。

    另外我在spark-shell写自定义方法时发现有个问题:

    def mapPartitionsTest(listParam:Iterator[Int]):Iterator[Int]={
    	println("by partition:")
    	var res = for(param<-listParam) 
            {
                 yield param*2
            }
    	res
    }
    

    如果我这么写yield,会报 illegal start of statement这个错误,和我说声明的不合法。 奇怪,试了办法没有找到原因,最后把大括号去掉就没有问题了

  • 相关阅读:
    (转)IDEA ERROR:找不到或无法加载主类
    Piggy-Bank
    Monkey and Banana
    Max Sum Plus Plus
    Doing Homework
    繁繁的游戏
    看试卷
    繁繁的队列
    大整数乘法
    文件操作(c++)
  • 原文地址:https://www.cnblogs.com/hark0623/p/4494734.html
Copyright © 2011-2022 走看看