Java RDD与Scala RDD

时间:2016-01-29 09:45:43

标签: scala apache-spark

我在Spark工作并沿途收拾Scala。我有一个关于RDD api以及如何实现各种基础RDD的问题。具体来说,我在spark-shell中运行了以下代码:

scala> val gspeech_path="/home/myuser/gettysburg.txt"
gspeech_path: String = /home/myuser/gettysburg.txt

scala> val lines=sc.textFile(gspeech_path)
lines: org.apache.spark.rdd.RDD[String] = MapPartitionsRDD[7] 
at textFile at <console>:29

scala> val pairs = lines.map(x => (x.split(" ")(0), x))
pairs: org.apache.spark.rdd.RDD[(String, String)] =  
MapPartitionsRDD[8] at map at <console>:3

scala> val temps:Seq[(String,Seq[Double])]=Seq(("SP",Seq(68,70,75)),
                                       ("TR",Seq(87,83,88,84,88)), 
                                       ("EN",Seq(52,55,58,57.5)),
                                       ("ER",Seq(90,91.3,88,91)))

temps: Seq[(String, Seq[Double])] = List((SP,List(68.0, 70.0, 75.0)), 
(TR,List(87.0, 83.0, 88.0, 84.0, 88.0)), (EN,List(52.0, 55.0, 58.0,  
57.5)), (ER,List(90.0, 91.3, 88.0, 91.0)))

scala> var temps_rdd0=sc.parallelize(temps)
temps_rdd0: org.apache.spark.rdd.RDD[(String, Seq[Double])] = 
ParallelCollectionRDD[9] at parallelize at <console>:29

我想进一步研究并查找MapPartitionsRDDParallelCollectionRDD的API,期望它们是基础RDD org.apache.spark.rdd的子类。 但是,当我搜索这些课程时,我找不到这些课程 Spark Scala API (Scaladocs)

我只能在Java文档中找到它们,而不是在spark.apache.org上的Scala文档中找到它们。 据我所知,Scala可以将两种语言混合在一起,因为Spark是用Java编写的。但是,我希望对与RDD有关的确切关系做一些澄清。所以我们有一个抽象的Scala RDD引用,其底层实现是一个Java RDD,根据这个响应:

# Scala abstract RDD = Concrete Java MapPartitionsRDD
org.apache.spark.rdd.RDD[String] = MapPartitionsRDD[7] 

提前感谢您的帮助/解释。

2 个答案:

答案 0 :(得分:0)

正如@Archeg在上面的评论中指出的那样,这些类确实是Scala类,可以在org.apache.spark.rdd.MapPartitionsRDD找到

https://github.com/apache/spark/blob/master/core/src/main/scala/org/apache/spark/rdd/MapPartitionsRDD.scala

导致我混淆的是当我在Spark Scala API (Scaladoc)进行搜索时找不到MapPartitionsRDD

答案 1 :(得分:0)

MapPartitionsRDD是一个RDD,它将提供的函数f应用于父RDD的每个分区。

默认情况下,它不保留分区 - 最后一个输入参数preservesPartitioning为false。如果是,则保留原始RDD的分区。

MapPartitionsRDD是以下转换的结果:

  1. 地图
  2. flatmap
  3. 过滤
  4. 格莱姆教授
  5. mapPartitions
  6. mapPartitionsWithIndex
  7. PairRDDFunctions.mapValues
  8. PairRDDFunctions.flatMapValues