作者:jwbnmbnm | 来源:互联网 | 2023-08-24 15:55
一、写在前面scala中map和flatmap的区别可以用一句话进行总结,原始RDD假如是10行,经过map操作后依旧是10行,但是flatmap后会˃10行map是对每一行进行处
一、写在前面
scala中map和flatmap的差异可以用一句话来概括,如果原来的RDD假设为10行,则经过map操作仍然是10行,但flatmap后=10行
map对各行进行处理,flatmap对各行进行处理后,如果处理结果长度为1,则与map操作相同; 如果处理后是List或Array类型,则该List或Array的每个元素都是一行
本文有两个非常好的例子: https://blog.csdn.net/shenshen deai/article/details/57081673
scalavalrdd=sc.parallelize (list (' coffee panda )、' happy panda ), ' happiest panda party ' ) (rdd : org.Apache.spark.rdd.rdd [ string ]=parallelcollectionrdd [0] atparallelellelizeatcoate=array(coffeePanda,happy panda,happiestpandaparty (scalar DD.flat map ) x=x.split (' ' ) ).collectres 13360阵列panda party ) scalavalrdd1=sc.parallelize (list (1,2,3, 3 ) rdd 1: org.Apache.spark.rdd.rdd [ int ]=parallelcollectionrdd [3] atparallelizeatconsole 336024 scalar DD 1.3 . 4 ) scalardD1.flatmap(x=x.to )3) ).collectres 3360 array (iint ) ) ) 65 )
在网上可以找到很多这样小的例子,但实际处理中处理了很多RDD的密钥-值对,所以以下是一些例子
//定义一个键值对RDD,长度只有一行,足以说明具体情况valtmp=list (),Array ),11.0,25.0极速赛车1天赚1000方法offeePanda,happy panda,happiestpandaparty (scalar DD.flat map ) x=x.split (' ' ) ).collectres 13360阵列panda party ) scalavalrdd1=sc.parallelize (list (1,2,3, 3 ) rdd 1: org.Apache.spark.rdd.rdd [ int ]=parallelcollectionrdd [3] atparallelizeatconsole 336024 scalar DD 1.3 . 4 ) scalardD1.flatmap(x=x.to )3) ).collectres 3360 array (iint ) ) ) 65 )
在网上可以找到很多这样小的例子,但实际处理中处理了很多RDD的密钥-值对,所以以下是一些例子
//定义一个键值对RDD,长度只有一行,足以说明具体情况valtmp=list (),Array ),11.0,25.0 ),1 ) 2511第二,长度11 ),第(2533第二,) 0 ) ) ) ) valtmp1=sc.parallelize(tmp ).repartition(1) list (imei _ Expo (0) ) 652 map与flatmap的区别valtmp ) _._2让我们分别比较一下imei_Expo(0).split ()、'() )/Scalatmp2.take(10 ).Foreach(println )/11.0//25.0 valtmp2=tmp1. map (t=valimei _ Expo=)。由逗号组成的字符串list(imei_expo(0(0).split )、', ')、0 )、imei_Expo )0).split )、'()1) }//scala tmp2.count )//RES 63: lOng=1//days _ keyword cuts 因此,最后的tmp2的长度也是3 valtmp2=tmp1. flat map { t=valimei _ Expo=t._2. filter (t=t._3==1).map(_._2 ) ) ) ) ) ) 65长度为1 val days _ keyword cuts=t._2. filter (t=t._3==0).map(._1) /长度为多个days _ 1