过滤元素rdd [array [string] by [0,1]

时间:2017-11-30 08:43:46

标签: scala apache-spark

我想基于二进制数组选择rdd的一些元素(特征)。我有一个由大小为40的0,1组成的数组,用于指定元素是否存在于该索引处。

我的RDD是从kddcup99数据集

创建的
val rdd=sc.textfile("./data/kddcup.txt")
val data=rdd.map(_.split(','))

如何过滤或选择二进制数组中对应索引值为1的data(rdd[Array[String]])元素?

1 个答案:

答案 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类似,您可以使用zipWithIndexcontains来检查您的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))