我想将字符串“ 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(_)))
并遇到相同的错误。
谢谢
答案 0 :(得分:0)
据我所知,您想查看被拆分后的状态文本是否包含单词列表,这些单词列表是a
的子集:
val a = Array("a1", "a2")
val filtered = stream.flatMap(status => status.getText.split(" ").filter(_.forall(a contains))