Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mapreduce spark 1.0.0 DStream.reduce运行不正常_Mapreduce_Streaming_Apache Spark - Fatal编程技术网

Mapreduce spark 1.0.0 DStream.reduce运行不正常

Mapreduce spark 1.0.0 DStream.reduce运行不正常,mapreduce,streaming,apache-spark,Mapreduce,Streaming,Apache Spark,是否有人使用spark 1.0.0获得DStream.reduce工作 我有一些代码看起来非常合理 val word1 = messages.map { word => val key = word (key, 1) } val wordcount = word1.reduce(reduceCount) private def reduceCount(count1: Int, count2: Int) : Int = { count1 + coun

是否有人使用spark 1.0.0获得DStream.reduce工作

我有一些代码看起来非常合理

  val word1 = messages.map {
    word =>
    val key = word
    (key, 1)
  }

val wordcount = word1.reduce(reduceCount)

private def reduceCount(count1: Int, count2: Int) : Int = {
   count1 + count2
}
reduce语句得到一个编译错误:类型不匹配;找到:必需整数:(字符串,Int)

为什么会有这样的抱怨?reduceCount应该只对int计数进行操作,reduce应该返回与word1相同的类型,即(String,int)。我尝试了很多变化来绕过这个错误,但它似乎表现得不正确

如果改为调用ReduceByAndWindow,则不存在编译错误

val wordcount = word1.reduceByKeyAndWindow(reduceCount, batchDuration)

操作
DStream.reduce
具有以下特征:

def reduce(reduceFunc: (T, T) => T): DStream[T]
语义上,它接受流中两个元素的关联函数,并生成一个元素

给定的
messagesDstream
是一个字符串流,映射后如下所示:

val word1 = messagesDstream.map {word => (word,1)}
word1
的类型是Tuple2[String,Int]。这意味着
reduce
应该使用带有签名的reduce函数:
f(x:(String,Int),y:(String,Int)):(String,Int)
。在问题提供的代码中,reduce函数是
f(x:Int,y:Int):Int


在本例中,您要使用的操作是
Dstream.reduceByKey(+)
,因为它将在按键对值进行分组后应用reduce函数,这就是字数计数的含义。

嘿,你领先我了。我刚刚意识到正确的调用是reduceByKey()。我错了,没有发现这个函数是昨天调用的。@ USE105811。如果你考虑回答的问题,考虑接受答案。@ USER 105811P:我知道你从来没有接受过一个你之前问过的问题。这是社区动态和礼仪的一部分,接受你认为正确答案的问题。有些人甚至会在看到你的记录后拒绝回答你的问题。我不得不用谷歌搜索如何接受答案。我投了赞成票,但仍然必须明确接受,这似乎是多余的。