我们可以使用RDD数据过滤器吗,如RDD.filter(x => x.NOT startswith(“ XX”)

Sud*_*shu 1 scala apache-spark

Spark / Scala中是否有任何方法可以过滤那些不Startswith("XX")喜欢的数据,RDD.filter(x => x.startsWith("XX")但是我的要求是过滤那些不以开头的记录"XX"

val custRDD = sc.textFile("D:\\CCA175\\Navdeep\\spark-dataset\\spark-dataset\\problem2\\customer.txt")
val wordRDD = custRDD.flatMap(x=>x.split(',')).filter(x => (x.startsWith("XX") && x.endsWith("XX")))
Run Code Online (Sandbox Code Playgroud)

但是我想过滤那些不以“ XX”开头/结尾的记录

Lev*_*sey 7

.filter(x => !(x.startsWith("XX") && x.endsWith("XX")))
Run Code Online (Sandbox Code Playgroud)

不幸的是,Spark(AFAIK)尚未添加filterNot到RDD API(它在Scala集合API中,Spark通常会在此之后使用)。您可以通过隐式添加该操作:

object RDDEnhancements {
  implicit class Ops[A](val underlying: RDD[A]) extends AnyVal {
    def filterNot(pred: A => Boolean): RDD[A] = underlying.filter(a => !pred(a))
  }
}
Run Code Online (Sandbox Code Playgroud)

然后在您希望filterNot操作可用的任何代码中

import RDDEnhancements._
Run Code Online (Sandbox Code Playgroud)