当前位置: 首页 > 知识库问答 >
问题:

如何知道Spark使用Scala推断出的RDD类型是哪种

缪升
2023-03-14

我在尝试下面的例子

val lista = List(("a", 3), ("a", 1), ("b", 7), ("a", 5))
val rdd = sc.parallelize(lista)

然后在壳中我得到了以下信息

rdd: org.apache.spark.rdd.RDD[(String, Int)] = ParallelCollectionRDD[40] at parallelize at <console>:30

但出于某种原因我还不知道我能不能执行这个判决

val resAgg = rdd.aggregateByKey(new HashSet[Int])(_+_, _++_)

把这个装进壳里

resAgg: org.apache.spark.rdd.RDD[(String, scala.collection.mutable.HashSet[Int])] = ShuffledRDD[41] at aggregateByKey at <console>:32

所以我有一些问题:

1.-名为RDD的变量的真正RDD类型是什么?因为在shell中,它显示的是org类型。阿帕奇。火花rdd。RDD[(String,Int)]但从API上看,RDD类没有aggregateByKey方法。顺便问一下,JavaPairdd类是否有aggregateByKey方法

2.-我如何验证/了解RDD的真实类型

-那是什么ParallelCollectionRDD出现了?我在github上查找了它,发现它是一个私有类,所以我想这就是为什么它没有出现在scala API上的原因,但它是用来做什么的呢?

我用的是Spark 1.6.2

共有1个答案

羊舌赞
2023-03-14

你看到的是隐式转换的效果:

>

  • rdd的类型是org.apache.spark.rdd.RDD[(String, Int)]
  • 当您尝试调用聚合ByKey并且它不存在于此类型时,编译器会查找一些隐式转换为某种类型-并找到此转换为PairRDDFunctions

    implicit def rddToPairRDDFunctions[K, V](rdd: RDD[(K, V)])
      (implicit kt: ClassTag[K], vt: ClassTag[V], ord: Ordering[K] = null): PairRDDFunctions[K, V] = {
      new PairRDDFunctions(rdd)
    }
    

    然后,调用PairRDDFunctions.aggregateByKey

    至于你的最后一个问题:

    那是什么ParallelCollection RDD

    RDD是一个包含许多子类的抽象类,这就是其中之一。一般来说,每个子类负责在RDD上执行的不同操作,例如读/写/洗牌/检查点等。在调用SparkContext时会使用这种特定类型。parallelize——意思是,它用于并行化来自驱动程序的集合。事实上,这是私人的,你不应该关心你手头上到底有哪种RDD亚型。

  •  类似资料:
    • 我有一个RDD,其模式如下: (我们称之为) 我希望创建一个新的RDD,每一行都为,键和值属于。 我希望输出如下: 有人能帮我处理这段代码吗? 我的尝试: 错误:值映射不是Char的成员 我理解这是因为map函数只适用于,而不是每个。请帮助我在中使用嵌套函数。

    • 问题内容: 我在Linux Ubuntu服务器中搜索php.ini文件所在的路径,并且在执行命令时发现很多php.ini 。那么如何从php.ini所在的php脚本网页中确切地知道呢? 问题答案: 您可以使用php_ini_loaded_file() 取自php.net: 您可能还需要检查php_ini_scanned_files() 另外,您应该注意,如果从CLI运行PHP脚本,则有可能使用与服

    • 对类型推导结果的查看的工具的选择和你在软件开发过程中的相关信息有关系。我们要探讨三种可能:在你编写代码的时候,在编译的时候和在运行的时候得到类型推导的信息。 IDE编辑器 在IDE里面的代码编辑器里面当你使用光标悬停在实体之上,常常可以显示出程序实体(例如变量,参数,函数等等)的类型。举一个例子,下面的代码: const int theAnswer = 42; auto x = theAnswer

    • 问题内容: 下面的方法完美无瑕 但是我没有指定此方法中的 是什么。编译器如何将 方法返回的值分配给 未指定类型i 的变量? 我只是测试了答案的有效性,指出了从该方法的返回类型推断出的答案。它似乎没有解决。请检查以下代码。它甚至不编译 再次修改源代码并对其进行测试,结果导致编译时错误 问题答案: 该方法如何推断类型 没有。泛型方法不推断其泛型类型-这就是为什么称为 类型参数 的原因。方法的 调用者

    • 我对Kotlin是新来的,这是我的问题: 我使用android studio 3.2.1 kotlin版本:1.2.71 对此有什么想法吗?