rdd

RDD的map和flatMap操作

雨燕双飞 提交于 2019-12-07 20:35:39
RDD的map和flatMap操作 RDD的map() 接收一个函数,把这个函数用于 RDD 中的每个元素,将函数的返回结果作为结果RDD 中对应元素的结果。 flatMap()对RDD每个输入元素生成多个输出元素,和 map() 类似,我们提供给 flatMap() 的函数被分别应用到了输入 RDD 的每个元素上。不 过返回的不是一个元素,而是一个返回值序列的迭代器。输出的 RDD 倒不是由迭代器组 成的。我们得到的是一个包含各个迭代器可访问的所有元素的 RDD。 from pyspark import SparkContext if __name__ == "__main__": master = "local" if len(sys.argv) == 2: master = sys.argv[1] try: sc.stop() except: pass sc = SparkContext(master, "WordCount") lines = sc.parallelize(["pandas", "i like pandas"]) result = lines.flatMap(lambda x: x.split(" ")) print(result.collect()) result = lines.map(lambda x: x.split(" ")) print

spark RDD操作map与flatmap的区别

隐身守侯 提交于 2019-12-07 20:35:25
以前总是分不清楚spark中flatmap和map的区别,现在弄明白了,总结分享给大家,先看看flatmap和map的定义。 map()是将函数用于RDD中的每个元素,将返回值构成新的RDD。 flatmap()是将函数应用于RDD中的每个元素,将返回的迭代器的所有内容构成新的RDD 有些拗口,看看例子就明白了。 val rdd = sc.parallelize( List ( "coffee panda" , "happy panda" , "happiest panda party" )) 输入 rdd. map (x=>x).collect 结果 res9: Array [ String ] = Array (coffee panda, happy panda, happiest panda party) 输入 rdd.flatMap(x=>x.split( " " )).collect 结果 res8: Array [ String ] = Array (coffee, panda, happy, panda, happiest, panda, party) flatMap说明白就是先map然后再flat,再来看个例子 val rdd1 = sc.parallelize( List ( 1 , 2 , 3 , 3 )) scala> rdd1.map(x=>x+ 1 )

Parsing multiline records in Scala

梦想与她 提交于 2019-12-07 20:31:57
问题 Here is my RDD[String] M1 module1 PIP a Z A PIP b Z B PIP c Y n4 M2 module2 PIP a I n4 PIP b O D PIP c O n5 and so on. Basically, I need a RDD of key (containing the second word on line1) and values of the subsequent PIP lines that can be iterated upon. I've tried the following val usgPairRDD = usgRDD.map(x => (x.split("\\n")(0), x)) but this gives me the following output (,) (M1 module1,M1 module1) (PIP a Z A,PIP a Z A) (PIP b Z B,PIP b Z B) (PIP c Y n4,PIP c Y n4) (,) (M2 module2,M2 module2

spark RDD算子(二) filter,map ,flatMap

狂风中的少年 提交于 2019-12-07 20:12:59
作者: 翟开顺 首发:CSDN 先来一张spark快速大数据中的图片进行快速入门,后面有更详细的例子 filter 举例,在F:\sparktest\sample.txt 文件的内容如下 aa bb cc aa aa aa dd dd ee ee ee ee ff aa bb zks ee kks ee zz zks 我要将包含zks的行的内容给找出来 scala版本 val lines = sc.textFile( "F:\\sparktest\\sample.txt" ).filter(line=>line.contains( "zks" )) //打印内容 lines.collect().foreach(println(_)); -------------输出------------------ ff aa bb zks ee zz zks java版本 JavaRDD<String> lines = sc.textFile( "F:\\sparktest\\sample.txt" ); JavaRDD<String> zksRDD = lines.filter( new Function<String, Boolean>() { @Override public Boolean call (String s) throws Exception { return s

spark scala 对RDD进行过滤----filter使用方法

ぐ巨炮叔叔 提交于 2019-12-07 20:08:45
现有一个 rdd: RDD [(String, Int)] val rdd = sc.parallelize( Seq (( "a" , 1 ), ( "a" , 2 ), ( "b" , 2 ), ( "b" , 3 ), ( "c" , 1 ))) 过滤条件逻辑运算符:>, <, == 整数类型数据的过滤 rdd.filter(_._2==2) rdd.filter(_._2>2) rdd.filter(_._2<2) rdd.filter(x => x._2==2) rdd.filter(x => x._2>2) rdd.filter(x => x._2<2) 传递参数过滤 val ind=2 rdd.filter(x => x._2==ind) rdd.filter(_._2==ind) rdd.filter(_._2>ind) rdd.filter(_._2<ind) rdd.filter(x => x._2==ind) rdd.filter(x => x._2>ind) rdd.filter(x => x._2<ind) 字符串类型过滤 rdd.filter(_._1=="a") rdd.filter(x => x._1=="a") 传递参数过滤 val str = s"a" rdd.filter(_._1==str) rdd.filter(x => x._1==str

Spark RDD coalesce()方法和repartition()方法

两盒软妹~` 提交于 2019-12-07 20:01:59
在Spark的RDD中,RDD是分区的。 有时候需要重新设置RDD的分区数量,比如RDD的分区中,RDD分区比较多,但是每个RDD的数量比较小,需要设置一个比较合理的分区。或者需要把RDD的分区数量调大。还有就是通过设置一个RDD的分区来达到设置生成的文件的数量。 有这两种方法是可以重设RDD分区:分别是coalesce()方法和repartition()。 这两个方法有什么区别,看看源码就知道了: def coalesce(numPartitions: Int, shuffle: Boolean = false , partitionCoalescer: Option[PartitionCoalescer] = Option.empty) (implicit ord: Ordering[T] = null ) : RDD[T] = withScope { require(numPartitions > 0 , s "Number of partitions ($numPartitions) must be positive." ) if (shuffle) { /** Distributes elements evenly across output partitions, starting from a random partition. */ val

Convert JavaPairRDD to JavaRDD

核能气质少年 提交于 2019-12-07 19:59:46
问题 I am fetching data from ElsticSearch using ElasticSearch-Hadoop Library. JavaPairRDD<String, Map<String, Object>> esRDD = JavaEsSpark.esRDD(sc); Now I have JavaPairRDD. I want to use Random Forest from MLLib on this RDD. So I am converting it to JavaPairRDD.toRDD(esRDD) this will give me RDD. Using RDD I am converting again to JavaRDD JavaRDD<LabeledPoint>[] splits = (JavaRDD.fromRDD(JavaPairRDD.toRDD(esRDD), esRDD.classTag())).randomSplit(new double[] { 0.5, 0.5 }); JavaRDD<LabeledPoint>

flatMap和map的区别

社会主义新天地 提交于 2019-12-07 19:51:40
map()是将函数用于RDD中的每个元素,将返回值构成新的RDD。 map的作用是对rdd之中的元素进行逐一进行函数操作映射为另外一个rdd。flatMap的操作是将函数应用于rdd之中的每一个元素,将返回的迭代器的所有内容构成新的rdd。通常用来切分单词。 map函数会对每一条输入进行指定的操作,然后为每一条输入返回一个对象;而flatMap函数则是两个操作的集合——正是“先映射后扁平化” 来源: CSDN 作者: Z_Data 链接: https://blog.csdn.net/Z_Date/article/details/87894933

RDD之flatMap与Map对比

纵然是瞬间 提交于 2019-12-07 19:39:38
定义 首先我们列出flatMap与Map的定义,可参考 RDD API def map[U](f: (T) ⇒ U)(implicit arg0: ClassTag[U]): RDD[U] Return a new RDD by applying a function to all elements of this RDD. def flatMap[U](f: (T) ⇒ TraversableOnce[U])(implicit arg0: ClassTag[U]): RDD[U] Return a new RDD by first applying a function to all elements of this RDD, and then flattening the results. api已经讲解较为清楚,map是将每个元素对应执行f函数,而flatMap对应的是将每个元素执行f函数后将其扁平化 示例 我们采用将每个元素按照空格的方法将每个元素进行分割,分别执行map与flatMap方法。 map方法如下图所示: flatMap方法如下图所示: 来源: CSDN 作者: mingWar 链接: https://blog.csdn.net/mingWar/article/details/79643126

Spark2.3 RDD之flatMap源码解析

旧街凉风 提交于 2019-12-07 19:32:26
Spark flatMap 源码: /** * Return a new RDD by first applying a function to all elements of this * RDD, and then flattening the results. */ def flatMap[U: ClassTag](f: T => TraversableOnce[U]): RDD[U] = withScope { val cleanF = sc.clean(f) new MapPartitionsRDD[U, T](this, (context, pid, iter) => iter.flatMap(cleanF)) } Scala flatMap 源码: /** Creates a new iterator by applying a function to all values produced by this iterator * and concatenating the results. * * @param f the function to apply on each element. * @return the iterator resulting from applying the given iterator-valued function * `f`