spark-streaming scala:如何将字符串数组传递给过滤器?

时间:2019-01-25 20:12:48

标签: scala apache-spark spark-streaming

我想将字符串“ a”替换为Strings数组,使.contains()检查数组中的每个String。有可能吗?

val filtered = stream.flatMap(status => status.getText.split(" ").filter(_.contains("a")))

编辑:

也尝试过此操作(sc是sparkContext):

val ssc = new StreamingContext(sc, Seconds(15))
val stream = TwitterUtils.createStream(ssc, None)
val filtered = stream.flatMap(status => status.getText.split(" ").filter(a.contains(_)))

并出现以下错误:

java.io.NotSerializableException:org.apache.spark.streaming.twitter.TwitterInputDStream的对象可能正在序列化,可能是关闭RDD操作的一部分。这是因为从闭包内部引用了DStream对象。请重写此DStream中的RDD操作以避免这种情况。已执行此操作,以避免不必要的对象使Spark任务膨胀。

然后我尝试在使用该阵列之前广播它:

val aBroadcast = sc.broadcast(a)
val filtered = stream.flatMap(status => status.getText.split(" ").filter(aBroadcast.value.contains(_)))

并遇到相同的错误。

谢谢

1 个答案:

答案 0 :(得分:0)

据我所知,您想查看被拆分后的状态文本是否包含单词列表,这些单词列表是a的子集:

val a = Array("a1", "a2")
val filtered = stream.flatMap(status => status.getText.split(" ").filter(_.forall(a contains))