Apache spark 函数的作用是:返回RDD[Char],而不是RDD[String]
我试图理解map和flatMap是如何工作的,但被下面的代码卡住了。flatMap函数返回一个RDD[Char],但我期望的是RDD[String]。 有人能解释为什么它会产生RDD[Char]Apache spark 函数的作用是:返回RDD[Char],而不是RDD[String],apache-spark,Apache Spark,我试图理解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 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)
看看这个答案: 基本上,flatmap将N个元素的RDD转换为逻辑上N个集合的RDD,然后将其展平为内部集合中所有元素的RDD 因此,当您执行inpurdd.flatmappx=>x0时,您将每个元素转换为一个字符串。字符串是字符的集合,因此展平部分会将整个RDD转换为结果字符的RDD
由于RDD基于scala集合,以下内容可能有助于更好地理解它。看看这个答案: 基本上,flatmap将N个元素的RDD转换为逻辑上N个集合的RDD,然后将其展平为内部集合中所有元素的RDD 因此,当您执行inpurdd.flatmappx=>x0时,您将每个元素转换为一个字符串。字符串是字符的集合,因此展平部分会将整个RDD转换为结果字符的RDD 由于RDD基于scala集合,以下内容可能有助于更好地理解它。flatMap的目标是将单个项转换为多个项,即一对多关系。例如,对于RDD[Order],每个订单可能有多个项目,我可以使用flatMap获取RDD[Item],而不是RDD[Seq[Item]] 在您的例子中,字符串实际上是一个Seq[Char]。因此,它假定您要做的是获取一个字符串并将其分解为组成字符 现在,如果您想使用flatMap来获取RDD中的所有原始字符串,那么flatMap函数应该如下所示:x=>x。flatMap的目标是将单个项转换为多个项,即一对多关系。例如,对于RDD[Order],每个订单可能有多个项目,我可以使用flatMap获取RDD[Item],而不是RDD[Seq[Item]] 在您的例子中,字符串实际上是一个Seq[Char]。因此,它假定您要做的是获取一个字符串并将其分解为组成字符 现在,如果您想使用flatMap来获取RDD中的所有原始字符串,那么flatMap函数应该如下所示:x=>x.可能的重复