Guo*_*Guo 24 apache-spark spark-streaming
在火花流中,每个批处理间隔的数据总是产生一个且只有一个RDD,为什么我们用它foreachRDD()
来预测RDD?RDD只有一个,不需要foreach.在我的测试中,我从未见过RDD不止一个.
maa*_*asg 46
A DStream
或"离散流"是一种将连续数据流分成小块的抽象.这被称为"微型化".每个微量分析成为一个RDD,给予Spark进行进一步处理.每个批处理间隔为每个DStream生成一个且仅有一个RDD.
RDD是分布式数据集合.可以将其视为一组指向集群中实际数据的指针.
DStream.foreachRDD
是Spark Streaming中的"输出运算符".它允许您访问DStream的底层RDD,以执行对数据执行实际操作的操作.例如,使用foreachRDD
您可以将数据写入数据库.
这里的小小思想就是要明白DStream是一个有时限的集合.让我将其与经典集合进行对比:获取用户列表并应用foreach:
val userList: List[User] = ???
userList.foreach{user => doSomeSideEffect(user)}
Run Code Online (Sandbox Code Playgroud)
这将将副作用函数doSomeSideEffect
应用于userList
集合的每个元素.
现在,让我们说我们现在不了解所有用户,因此我们无法建立它们的列表.相反,我们有一群用户,就像早上赶到咖啡馆的人一样:
val userDStream: DStream[User] = ???
userDstream.foreachRDD{usersRDD =>
usersRDD.foreach{user => serveCoffee(user)}
}
Run Code Online (Sandbox Code Playgroud)
注意:
DStream.foreachRDD
给你的RDD[User]
,不是一个单一的用户.回到我们的咖啡示例,即在某段时间内到达的用户集合.rdd.foreach
为每个用户提供咖啡.考虑执行:我们可能会有一群咖啡师制作咖啡.那些是我们的执行者.Spark Streaming负责制作一小批用户(或订单),Spark将在咖啡师之间分配工作,这样我们就可以将咖啡制作并行化并加快咖啡的供应速度.
归档时间: |
|
查看次数: |
14104 次 |
最近记录: |