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

flatMap()函数返回rdd[Char]而不是rdd[String]

裴焱
2023-03-14

我试图理解map和flatMap是如何工作的,但是在下面的代码中被卡住了。flatMap()函数返回一个RDD[Char],但我希望返回的是RDD[String]。有人能解释为什么它会产生RDD[Char]吗?

scala> val inputRDD = sc.parallelize(Array(Array("This is Spark"), Array("It is a processing language"),Array("Very fast"),Array("Memory operations")))

scala> val mapRDD = inputRDD.map(x => x(0))
mapRDD: org.apache.spark.rdd.RDD[String] = MapPartitionsRDD[28] at map at <console>:26

scala> mapRDD.collect
res27: Array[String] = Array(This is Spark, It is a processing language, Very fast, Memory operations)

scala> val mapRDD = inputRDD.flatMap(x => x(0))
mapRDD: org.apache.spark.rdd.RDD[Char] = MapPartitionsRDD[29] at flatMap at <console>:26

scala> mapRDD.collect
res28: Array[Char] = Array(T, h, i, s,  , i, s,  , S, p, a, r, k, I, t,  , i, s,  , a,  , p, r, o, c, e, s, s, i, n, g,  , l, a, n, g, u, a, g, e, V, e, r, y,  , f, a, s, t, M, e, m, o, r, y,  , o, p, e, r, a, t, i, o, n, s)

共有1个答案

欧阳意蕴
2023-03-14

看看这个答案:https://stackoverflow.com/a/22510434/1547734

基本上,flatmap将N个元素的RDD转换为(逻辑上)N个集合的RDD,然后将其扁平化为内部集合的所有元素的RDD。

因此,当您执行inputrdd.flatMap(x=>x(0))时,您将每个元素转换为一个字符串。字符串是字符的集合,因此“扁平化”部分将把整个RDD转换为结果字符的RDD。

由于RDD是基于scala集合的,下面的http://www.brunton-spall.co.uk/post/2011/12/02/map-map-and-flatmap-in-scala/可能有助于更多地理解它。

 类似资料:
  • RDD

    现在我们已经在我们的系统上安装并配置了PySpark,我们可以在Apache Spark上用Python编程。 但在此之前,让我们了解Spark - RDD中的一个基本概念。 RDD代表Resilient Distributed Dataset ,它们是在多个节点上运行和操作以在集群上进行并行处理的元素。 RDD是不可变元素,这意味着一旦创建了RDD,就无法对其进行更改。 RDD也具有容错能力,因

  • 伙计们,我正在写一个资源管理器,它可以管理不同类型的资源。资源可以是整数或一些自定义类型。所以,我定义了这样一个接口: 此接口的实现者之一管理“int”类型的资源。因为我做不到: 我最终做了: 注意:使用了“整数”而不是“整数”。 我有一段这样的代码: 函数internalToExternal()返回“int”而不是“Integer”。 问题:1.是否有从“int”到“Integer”的自动转换?

  • 我试图了解异步/等待如何与promise一起工作。 据我所知,await应该是阻塞的,在上面的代码中,它似乎阻塞了返回带有原语

  • 从数据库中提取博客。 为什么这里的blogContent在函数的上下文中是全局的,而我们正在内部更改它,所以它应该返回值,有人能解释为什么会这样吗? 有没有不使用promise/async/await的方法>>>有人给了我答案 我如何从异步调用返回响应? 但这一点我不知道,最主要的是我不知道Ajax。

  • 问题内容: 我有一个发出AJAX调用的功能(通过jQuery)。在本节中,我有一个函数说: 但是,如果我这样称呼它: 第一个永远不会被调用。 如果将an 放入函数中,则为true,但在该函数返回之前不会为true 。 可以将回调函数传递给我的方法吗?喜欢: 问题答案: 是一个 回调 函数。它将由Ajax对象调用-异步!-操作完成时。您无法捕捉回调的结果,只有Ajax对象可以做到这一点。 您的函数-

  • 我很好奇在Spark中把一个RDD传递给一个函数到底做了什么。 假设我们如上定义一个函数。当我们调用函数并传递一个现有的RDD[String]对象作为输入参数时,这个my_function是否将这个RDD作为函数参数进行“复制”?换句话说,是按引用调用还是按值调用?