我想基于二进制数组选择rdd的一些元素(特征)。我有一个由大小为40的0,1
组成的数组,用于指定元素是否存在于该索引处。
我的RDD是从kddcup99数据集
创建的val rdd=sc.textfile("./data/kddcup.txt")
val data=rdd.map(_.split(','))
如何过滤或选择二进制数组中对应索引值为1的data(rdd[Array[String]])
元素?
答案 0 :(得分:1)
如果我理解你的问题,你就会有一个像:
这样的数组val arr = Array(1, 0, 1, 1, 1, 0)
RDD[Array[String]]
看起来像:
val rdd = sc.parallelize(Array(
Array("A", "B", "C", "D", "E", "F") ,
Array("G", "H", "I", "J", "K", "L")
) )
现在,要获取arr
为1的索引处的元素,您需要首先获得1
arr
的索引
val requiredIndices = arr.zipWithIndex.filter(_._1 == 1).map(_._2)
requiredIndices: Array[Int] = Array(0, 2, 3, 4)
然后与RDD
类似,您可以使用zipWithIndex
和contains
来检查您的requiredIndices
数组中是否有该索引:
rdd.map(_.zipWithIndex.filter(x => requiredIndices.contains(x._2) ).map(_._1) )
// Array[Array[String]] = Array(Array(A, C, D, E), Array(G, I, J, K))