Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 从RDD获取值_Scala_Hadoop_Apache Spark - Fatal编程技术网

Scala 从RDD获取值

Scala 从RDD获取值,scala,hadoop,apache-spark,Scala,Hadoop,Apache Spark,我使用Scala以以下格式创建了一个RDDWTI: Array[(String, (Array[String], Array[String]))] 如何从这个RDD获取数组[1]的列表 第一个数据行的数据为: // Array[(String, (Array[String], Array[String]))] Array( ( 966515171418, ( Array(4579848447, 4579848453, 2015-07-29 03:27:28, 4

我使用Scala以以下格式创建了一个
RDD
WTI:

Array[(String, (Array[String], Array[String]))]
如何从这个
RDD
获取
数组[1]
的列表

第一个数据行的数据为:

// Array[(String, (Array[String], Array[String]))]
Array(
  (
    966515171418,
    (
      Array(4579848447, 4579848453, 2015-07-29 03:27:28, 44, 1, 1, 966515171418, 966515183263, 420500052424347, 0, 52643, 9, 5067, 5084, 2, 1, 0, 0),
      Array(4579866236, 4579866226, 2015-07-29 04:16:22, 37, 1, 1, 966515171418, 966515183264, 420500052424347, 0, 3083, 9, 5072, 5084, 2, 1, 0, 0)
    )
  )
)

假设您有类似的东西(只需粘贴到
火花壳中
):

然后使用

scala> rdd.first._2._1
res9: Array[String] = Array(4579848447, 4579848453, 2015-07-29 03:27:28, 44, 1, 1, 966515171418, 966515183263, 420500052424347, 0, 52643, 9, 5067, 5084, 2, 1, 0, 0)
这意味着第一行(是Tuple2),然后是tuple的第二个元素(也是Tuple2),然后是第一个元素

使用模式匹配

scala> rdd.first match { case (_, (array1, _)) => array1 }
res30: Array[String] = Array(4579848447, 4579848453, 2015-07-29 03:27:28, 44, 1, 1, 966515171418, 966515183263, 420500052424347, 0, 52643, 9, 5067, 5084, 2, 1, 0, 0)

如果您想从所有行中获取它,只需使用
map()

它将所有行的结果放入一个数组中

另一个选项是在
map()
中使用模式匹配:


欢迎来到SO!阅读谢谢@Beryllium,你的答案和我想要的非常接近。我得到如下结果:Array[Array[String]=Array(Array(45798447457984532015-07-29 03:27:28,44,1,1,966515171418,966515183263420500052424347,0,52643,95067,5084,2,1,0,0)),有没有一种快速的方法可以让我得到内部数组[String]我现在得到了,只需要将rdd平面化,它就可以给出数组。谢谢,我已经更新了答案:如果您只想处理第一行,请使用
first()
(可能前面有
filter
,这样实际上只剩下一行)。如果需要所有行,请使用
map()
<代码>平面图< /代码>可能会混淆:考虑RDD中有多于一行的情况,并检查<代码>平面图< /代码>仍然给出您想要的结果。
scala> rdd.first match { case (_, (array1, _)) => array1 }
res30: Array[String] = Array(4579848447, 4579848453, 2015-07-29 03:27:28, 44, 1, 1, 966515171418, 966515183263, 420500052424347, 0, 52643, 9, 5067, 5084, 2, 1, 0, 0)
scala> rdd.map(_._2._1).collect()
scala> rdd.map { case (_, (array1, _)) => array1 }.collect()