我试图在Spark中使用RDD划分嵌套数组。例如,有一个val arr = sc.textFile("filename").map(_.split(" "))
包含四个句子,如下所示:
"他很好","她很好","我很好","我们很好"
我使用Array[Array[String]] = Array(Array(he, is, good),
Array(she, is, good),
... )
命令得到了这个:
Array(he, is, good)
我想使用每个数组元素(即{{1}}),但我不知道如何划分它。我怎么能分开这个?
答案 0 :(得分:0)
目前还不清楚你的意思是什么,而且通常在函数式编程语言中,当你想对集合的每个元素做任何事情时(或者可迭代的'),您可以使用map
功能。 map
根据您传递的函数转换每个元素。例如,在工作表中,您可以执行此操作:
val sentences = Array(Array("he", "is", "good"),
Array("she", "is", "very", "good"))
def yodaize(sentence: Array[String]): Array[String] = {
val reversed = sentence.reverse
println("Yoda says, '%s'".format(reversed.mkString(" ")))
reversed
}
yodaize(Array("I", "am", "small"))
val yodaSentences = sentences.map(yodaize)
函数yodaize
做两件事:它反转传递给它的句子,作为副作用打印出反向句子。上面的工作表输出是:
sentences: Array[Array[String]] = [[Ljava.lang.String;@faffecf
yodaize: yodaize[](val sentence: Array[String]) => Array[String]
Yoda says, 'small am I'
res0: Array[String] = [Ljava.lang.String;@4bf1c779
Yoda says, 'good is he'
Yoda says, 'good very is she'
yodaSentences: Array[Array[String]] = [[Ljava.lang.String;@40a19a85
这里很难直接看到,但yodaSentences
是每个子阵列颠倒的原始数组:
Array(Array("good", "is", "he"),
Array("good", "very", "is", "she"))
使用map
,您可以传入任何功能。它可以直接转换元素或具有副作用。通过这种方式,函数式语言可以处理每个元素,而无需真正地划分'他们。请注意,flatMap
,foldLeft
和filter
等其他功能可用于对您的集合执行其他类型的排列。
答案 1 :(得分:0)
您可以map
和foreach
使用Array
和RDD
:
yourReference.map(arrayOfStrings => arrayOfStrings.mkString)
或
yourReference.foreach(arrayOfStrings => println(Arrays.toString(arrayOfStrings)))