我正在运行一个24/7的spark流,并使用updateStateByKey 有可能24/7运行火花流? 如果是,则updateStateByKey不会变大,如何处理它? 我们是否必须在24/7运行时定期重置/删除updateStateByKey,如果没有重置方式和时间? 或Spark以分布式方式处理?如何动态增加内存/存储空间。
当updateStateByKey增长
时,我收到以下错误Array out of bound exception
Exception while deleting local spark dir: /var/folders/3j/9hjkw0890sx_qg9yvzlvg64cf5626b/T/spark-local-20141026101251-cfb4
java.io.IOException: Failed to delete: /var/folders/3j/9hjkw0890sx_qg9yvzlvg64cf5626b/T/spark-local-20141026101251-cfb4
如何处理这个..请指出我是否有任何文件?我完全陷入困境,非常感谢任何帮助..感谢您的时间
答案 0 :(得分:5)
使用Java中的Optional.absent()和Scala中的None来删除键。可以在http://blog.cloudera.com/blog/2014/11/how-to-do-near-real-time-sessionization-with-spark-streaming-and-apache-hadoop/找到工作示例。
答案 1 :(得分:0)
使用None更新密钥会将其从spark中删除。如果您希望将密钥保留一段时间,可以将密钥过期时间附加到密钥中,并在每批次检查密钥。
例如,这里是按分钟计算记录的代码:
val counts = lines.map(line => (currentMinute, 1))
val countsWithState = counts updateStateByKey { (values: Seq[Int], state: Option[Int]) =>
if (values.isEmpty) { // every key will be iterated, even if there's no record in this batch
println("values is empty")
None // this will remove the key from spark
} else {
println("values size " + values.size)
Some(state.sum + values.sum)
}
}
答案 2 :(得分:0)
pyspark:updateStateByKey(self,updateFunc,numPartitions = None,initialRDD = None)
返回一个新的“状态” DStream,其中每个键的状态通过应用 给定功能的键的先前状态和键的新值。
@param updateFunc:状态更新功能。如果此函数返回None,则 相应的状态键值对将被消除。
updateFunc方法返回None,状态键值对删除;