Scala 从RDD获取值
我使用Scala以以下格式创建了一个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
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()