You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@spark.apache.org by Dean Wampler <de...@gmail.com> on 2015/12/22 17:46:02 UTC
Re: spark streaming updateStateByKey state is nonsupport other type
except ClassTag such as list?
There are ClassTags for Array, List, and Map, as well as for Int, etc. that
you might have inside those collections. What do you mean by sql? Could you
post more of your code?
Dean Wampler, Ph.D.
Author: Programming Scala, 2nd Edition
<http://shop.oreilly.com/product/0636920033073.do> (O'Reilly)
Typesafe <http://typesafe.com>
@deanwampler <http://twitter.com/deanwampler>
http://polyglotprogramming.com
On Mon, Dec 21, 2015 at 8:51 PM, ouruia@cnsuning.com <ou...@cnsuning.com>
wrote:
>
> spark streaming updateStateByKey state no support Array type without
> classTag? how to slove the problem?
>
> def updateStateByKey[S: ClassTag](
> updateFunc: (Seq[V], Option[S]) => Option[S]
> ): DStream[(K, S)] = ssc.withScope {
> updateStateByKey(updateFunc, defaultPartitioner())
> }
>
> ClassTag not support other type eg:hashmap ,list ,sql.
>
>
> my usecase as following:
> save the lastest three click log with collecting goods from
> different topic with same member ID, then the system will recommend
> related products according to lastest three click log with collecting
> goods.
> I want to use updateStateByKey state to save it ,however updateStateByKey
> state is nonsupport other type except ClassTag such as list.
>
>
>
>
> thanks
> for your help
>
>
>
>
> ------------------------------
> Ricky Ou(欧 锐)
>
>
>
>
Re: Re: spark streaming updateStateByKey state is nonsupport other type except ClassTag such as list?
Posted by "ouruia@cnsuning.com" <ou...@cnsuning.com>.
Dean,
the following code test pasted . Thank for you again.
if (args.length < 2) {
System.err.println("Usage: StatefulNetworkWordBiggest3Vaules <hostname> <port>")
System.exit(1)
}
val updateFunc = (key:String,values: Seq[Seq[Int]], state: Option[Seq[Int]]) => {
if(values.length>0){
Some(values(0))
}else {
Some(state.getOrElse(Seq(0)))
}
}
val newUpdateFunc = (iterator: Iterator[(String, Seq[Seq[Int]], Option[Seq[Int]])]) => {
iterator.flatMap(t => updateFunc(t._1,t._2, t._3).map(s => (t._1, s)))
}
val sparkConf = new SparkConf().setAppName("StatefulNetworkWordBiggest3Vaules")
// Create the context with a 1 second batch size
val ssc = new StreamingContext(sparkConf, Seconds(1))
ssc.checkpoint("/user/spark/StatefulNetworkWordBiggest3Vaules1")
// Initial RDD input to updateStateByKey
val initialRDD = ssc.sparkContext.parallelize(List(("hello", Seq(0)), ("world", Seq(0))))
// Create a ReceiverInputDStream on target ip:port and count the
// words in input stream of \n delimited test (eg. generated by 'nc')
val lines = ssc.socketTextStream(args(0), args(1).toInt)
val words = lines.flatMap(_.split(" "))
val wordDstream = words.map(x => {
val v= scala.util.Random.nextInt(1000)
(x,Seq(v))
})
// Update the cumulative count using updateStateByKey
// This will give a Dstream made of state (which is the cumulative count of the words)
// wordDstream.updateStateByKey(newUpdateFunc, new HashPartitioner (ssc.sparkContext.defaultParallelism),true,initialRDD)
val stateDstream = wordDstream.updateStateByKey[Seq[Int]](newUpdateFunc, new HashPartitioner (ssc.sparkContext.defaultParallelism),true, initialRDD)
stateDstream.print()
ssc.start()
ssc.awaitTermination()
Ricky Ou(欧 锐)
From: ouruia@cnsuning.com
Date: 2015-12-23 14:19
To: Dean Wampler
CC: user; tdas@databricks.com
Subject: Re: Re: spark streaming updateStateByKey state is nonsupport other type except ClassTag such as list?
as the following code modified form StateflNetwork in exampile package
if (args.length < 2) {
System.err.println("Usage: StatefulNetworkWordBiggest3Vaules <hostname> <port>")
System.exit(1)
}
/**
* state is min(max(3))
*/
val updateFunc = (key:String,values: Seq[Seq[Int]], state: Seq[Int]) => {
values(0)
}
val newUpdateFunc = (iterator: Iterator[(String, Seq[Seq[Int]], Seq[Int])]) => {
iterator.flatMap(t => updateFunc(t._1,t._2, t._3).map(s => (t._1, s)))
}
val sparkConf = new SparkConf().setAppName("StatefulNetworkWordCount")
// Create the context with a 1 second batch size
val ssc = new StreamingContext(sparkConf, Seconds(1))
ssc.checkpoint(".")
// Initial RDD input to updateStateByKey
val initialRDD = ssc.sparkContext.parallelize(List(("hello", Seq(1)), ("world", Seq(1))))
// Create a ReceiverInputDStream on target ip:port and count the
// words in input stream of \n delimited test (eg. generated by 'nc')
val lines = ssc.socketTextStream(args(0), args(1).toInt)
val words = lines.flatMap(_.split(" "))
val wordDstream = words.map(x => (x, scala.util.Random.nextInt(1000)))
// Update the cumulative count using updateStateByKey
// This will give a Dstream made of state (which is the cumulative count of the words)
val stateDstream = wordDstream.updateStateByKey[Seq[Int]](newUpdateFunc,
new HashPartitioner (ssc.sparkContext.defaultParallelism))
stateDstream.print()
ssc.start()
ssc.awaitTermination()
the compile error:
Error:(77, 52) overloaded method value updateStateByKey with alternatives:
(updateFunc: Iterator[(String, Seq[Int], Option[Seq[Int]])] => Iterator[(String, Seq[Int])],partitioner: org.apache.spark.Partitioner,rememberPartitioner: Boolean,initialRDD: org.apache.spark.rdd.RDD[(String, Seq[Int])])(implicit evidence$7: scala.reflect.ClassTag[Seq[Int]])org.apache.spark.streaming.dstream.DStream[(String, Seq[Int])] <and>
(updateFunc: (Seq[Int], Option[Seq[Int]]) => Option[Seq[Int]],partitioner: org.apache.spark.Partitioner,initialRDD: org.apache.spark.rdd.RDD[(String, Seq[Int])])(implicit evidence$6: scala.reflect.ClassTag[Seq[Int]])org.apache.spark.streaming.dstream.DStream[(String, Seq[Int])] <and>
(updateFunc: Iterator[(String, Seq[Int], Option[Seq[Int]])] => Iterator[(String, Seq[Int])],partitioner: org.apache.spark.Partitioner,rememberPartitioner: Boolean)(implicit evidence$5: scala.reflect.ClassTag[Seq[Int]])org.apache.spark.streaming.dstream.DStream[(String, Seq[Int])] <and>
(updateFunc: (Seq[Int], Option[Seq[Int]]) => Option[Seq[Int]],partitioner: org.apache.spark.Partitioner)(implicit evidence$4: scala.reflect.ClassTag[Seq[Int]])org.apache.spark.streaming.dstream.DStream[(String, Seq[Int])] <and>
(updateFunc: (Seq[Int], Option[Seq[Int]]) => Option[Seq[Int]],numPartitions: Int)(implicit evidence$3: scala.reflect.ClassTag[Seq[Int]])org.apache.spark.streaming.dstream.DStream[(String, Seq[Int])] <and>
(updateFunc: (Seq[Int], Option[Seq[Int]]) => Option[Seq[Int]])(implicit evidence$2: scala.reflect.ClassTag[Seq[Int]])org.apache.spark.streaming.dstream.DStream[(String, Seq[Int])]
cannot be applied to (Iterator[(String, Seq[Seq[Int]], Seq[Int])] => Iterator[(String, Int)], org.apache.spark.HashPartitioner, Boolean, org.apache.spark.rdd.RDD[(String, Seq[Int])])
val stateDstream = wordDstream.updateStateByKey[Seq[Int]](newUpdateFunc,
Ricky Ou(欧 锐)
部 门:苏宁云商 IT总部技术支撑研发中心大
数据中心数据平台开发部
tel :18551600418
email : ouruia@cnsuning.com
From: Dean Wampler
Date: 2015-12-23 00:46
To: ouruia@cnsuning.com
CC: user; tdas@databricks.com
Subject: Re: spark streaming updateStateByKey state is nonsupport other type except ClassTag such as list?
There are ClassTags for Array, List, and Map, as well as for Int, etc. that you might have inside those collections. What do you mean by sql? Could you post more of your code?
Dean Wampler, Ph.D.
Author: Programming Scala, 2nd Edition (O'Reilly)
Typesafe
@deanwampler
http://polyglotprogramming.com
On Mon, Dec 21, 2015 at 8:51 PM, ouruia@cnsuning.com <ou...@cnsuning.com> wrote:
spark streaming updateStateByKey state no support Array type without classTag? how to slove the problem?
def updateStateByKey[S: ClassTag](
updateFunc: (Seq[V], Option[S]) => Option[S]
): DStream[(K, S)] = ssc.withScope {
updateStateByKey(updateFunc, defaultPartitioner())
}
ClassTag not support other type eg:hashmap ,list ,sql.
my usecase as following:
save the lastest three click log with collecting goods from different topic with same member ID, then the system will recommend related products according to lastest three click log with collecting goods.
I want to use updateStateByKey state to save it ,however updateStateByKey state is nonsupport other type except ClassTag such as list.
thanks for your help
Ricky Ou(欧 锐)
Re: Re: spark streaming updateStateByKey state is nonsupport other type except ClassTag such as list?
Posted by "ouruia@cnsuning.com" <ou...@cnsuning.com>.
as the following code modified form StateflNetwork in exampile package
if (args.length < 2) {
System.err.println("Usage: StatefulNetworkWordBiggest3Vaules <hostname> <port>")
System.exit(1)
}
/**
* state is min(max(3))
*/
val updateFunc = (key:String,values: Seq[Seq[Int]], state: Seq[Int]) => {
values(0)
}
val newUpdateFunc = (iterator: Iterator[(String, Seq[Seq[Int]], Seq[Int])]) => {
iterator.flatMap(t => updateFunc(t._1,t._2, t._3).map(s => (t._1, s)))
}
val sparkConf = new SparkConf().setAppName("StatefulNetworkWordCount")
// Create the context with a 1 second batch size
val ssc = new StreamingContext(sparkConf, Seconds(1))
ssc.checkpoint(".")
// Initial RDD input to updateStateByKey
val initialRDD = ssc.sparkContext.parallelize(List(("hello", Seq(1)), ("world", Seq(1))))
// Create a ReceiverInputDStream on target ip:port and count the
// words in input stream of \n delimited test (eg. generated by 'nc')
val lines = ssc.socketTextStream(args(0), args(1).toInt)
val words = lines.flatMap(_.split(" "))
val wordDstream = words.map(x => (x, scala.util.Random.nextInt(1000)))
// Update the cumulative count using updateStateByKey
// This will give a Dstream made of state (which is the cumulative count of the words)
val stateDstream = wordDstream.updateStateByKey[Seq[Int]](newUpdateFunc,
new HashPartitioner (ssc.sparkContext.defaultParallelism))
stateDstream.print()
ssc.start()
ssc.awaitTermination()
the compile error:
Error:(77, 52) overloaded method value updateStateByKey with alternatives:
(updateFunc: Iterator[(String, Seq[Int], Option[Seq[Int]])] => Iterator[(String, Seq[Int])],partitioner: org.apache.spark.Partitioner,rememberPartitioner: Boolean,initialRDD: org.apache.spark.rdd.RDD[(String, Seq[Int])])(implicit evidence$7: scala.reflect.ClassTag[Seq[Int]])org.apache.spark.streaming.dstream.DStream[(String, Seq[Int])] <and>
(updateFunc: (Seq[Int], Option[Seq[Int]]) => Option[Seq[Int]],partitioner: org.apache.spark.Partitioner,initialRDD: org.apache.spark.rdd.RDD[(String, Seq[Int])])(implicit evidence$6: scala.reflect.ClassTag[Seq[Int]])org.apache.spark.streaming.dstream.DStream[(String, Seq[Int])] <and>
(updateFunc: Iterator[(String, Seq[Int], Option[Seq[Int]])] => Iterator[(String, Seq[Int])],partitioner: org.apache.spark.Partitioner,rememberPartitioner: Boolean)(implicit evidence$5: scala.reflect.ClassTag[Seq[Int]])org.apache.spark.streaming.dstream.DStream[(String, Seq[Int])] <and>
(updateFunc: (Seq[Int], Option[Seq[Int]]) => Option[Seq[Int]],partitioner: org.apache.spark.Partitioner)(implicit evidence$4: scala.reflect.ClassTag[Seq[Int]])org.apache.spark.streaming.dstream.DStream[(String, Seq[Int])] <and>
(updateFunc: (Seq[Int], Option[Seq[Int]]) => Option[Seq[Int]],numPartitions: Int)(implicit evidence$3: scala.reflect.ClassTag[Seq[Int]])org.apache.spark.streaming.dstream.DStream[(String, Seq[Int])] <and>
(updateFunc: (Seq[Int], Option[Seq[Int]]) => Option[Seq[Int]])(implicit evidence$2: scala.reflect.ClassTag[Seq[Int]])org.apache.spark.streaming.dstream.DStream[(String, Seq[Int])]
cannot be applied to (Iterator[(String, Seq[Seq[Int]], Seq[Int])] => Iterator[(String, Int)], org.apache.spark.HashPartitioner, Boolean, org.apache.spark.rdd.RDD[(String, Seq[Int])])
val stateDstream = wordDstream.updateStateByKey[Seq[Int]](newUpdateFunc,
Ricky Ou(欧 锐)
部 门:苏宁云商 IT总部技术支撑研发中心大
数据中心数据平台开发部
tel :18551600418
email : ouruia@cnsuning.com
From: Dean Wampler
Date: 2015-12-23 00:46
To: ouruia@cnsuning.com
CC: user; tdas@databricks.com
Subject: Re: spark streaming updateStateByKey state is nonsupport other type except ClassTag such as list?
There are ClassTags for Array, List, and Map, as well as for Int, etc. that you might have inside those collections. What do you mean by sql? Could you post more of your code?
Dean Wampler, Ph.D.
Author: Programming Scala, 2nd Edition (O'Reilly)
Typesafe
@deanwampler
http://polyglotprogramming.com
On Mon, Dec 21, 2015 at 8:51 PM, ouruia@cnsuning.com <ou...@cnsuning.com> wrote:
spark streaming updateStateByKey state no support Array type without classTag? how to slove the problem?
def updateStateByKey[S: ClassTag](
updateFunc: (Seq[V], Option[S]) => Option[S]
): DStream[(K, S)] = ssc.withScope {
updateStateByKey(updateFunc, defaultPartitioner())
}
ClassTag not support other type eg:hashmap ,list ,sql.
my usecase as following:
save the lastest three click log with collecting goods from different topic with same member ID, then the system will recommend related products according to lastest three click log with collecting goods.
I want to use updateStateByKey state to save it ,however updateStateByKey state is nonsupport other type except ClassTag such as list.
thanks for your help
Ricky Ou(欧 锐)
Re: Re: spark streaming updateStateByKey state is nonsupport other type except ClassTag such as list?
Posted by "ouruia@cnsuning.com" <ou...@cnsuning.com>.
So sorry , should be Seq, not sql . thanks for your help.
Ricky Ou(欧 锐)
From: Dean Wampler
Date: 2015-12-23 00:46
To: ouruia@cnsuning.com
CC: user; tdas@databricks.com
Subject: Re: spark streaming updateStateByKey state is nonsupport other type except ClassTag such as list?
There are ClassTags for Array, List, and Map, as well as for Int, etc. that you might have inside those collections. What do you mean by sql? Could you post more of your code?
Dean Wampler, Ph.D.
Author: Programming Scala, 2nd Edition (O'Reilly)
Typesafe
@deanwampler
http://polyglotprogramming.com
On Mon, Dec 21, 2015 at 8:51 PM, ouruia@cnsuning.com <ou...@cnsuning.com> wrote:
spark streaming updateStateByKey state no support Array type without classTag? how to slove the problem?
def updateStateByKey[S: ClassTag](
updateFunc: (Seq[V], Option[S]) => Option[S]
): DStream[(K, S)] = ssc.withScope {
updateStateByKey(updateFunc, defaultPartitioner())
}
ClassTag not support other type eg:hashmap ,list ,sql.
my usecase as following:
save the lastest three click log with collecting goods from different topic with same member ID, then the system will recommend related products according to lastest three click log with collecting goods.
I want to use updateStateByKey state to save it ,however updateStateByKey state is nonsupport other type except ClassTag such as list.
thanks for your help
Ricky Ou(欧 锐)