我在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
我想进一步研究并查找MapPartitionsRDD
和ParallelCollectionRDD
的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]
提前感谢您的帮助/解释。
答案 0 :(得分:0)
正如@Archeg在上面的评论中指出的那样,这些类确实是Scala类,可以在org.apache.spark.rdd.MapPartitionsRDD找到
导致我混淆的是当我在Spark Scala API (Scaladoc)进行搜索时找不到MapPartitionsRDD
答案 1 :(得分:0)
MapPartitionsRDD是一个RDD,它将提供的函数f应用于父RDD的每个分区。
默认情况下,它不保留分区 - 最后一个输入参数preservesPartitioning为false。如果是,则保留原始RDD的分区。
MapPartitionsRDD是以下转换的结果: