gpt4 book ai didi

apache-spark - DStream.foreachRDD 函数的含义是什么?

转载 作者:行者123 更新时间:2023-12-03 07:27:07 25 4
gpt4 key购买 nike

在 Spark Streaming 中,每一批数据总是生成一个且仅一个 RDD,为什么我们使用 foreachRDD() 来 foreach RDD? RDD只是一个,不需要foreach。在我的测试中,我从未见过超过一个的 RDD。

最佳答案

DStream 或“离散流”是一种抽象,它将连续的数据流分成小块。这称为“微批处理”。每个微批处理都会成为一个 RDD,交给 Spark 进行进一步处理。 每个批处理间隔为每个 DStream 生成一个且仅有一个 RDD

RDD 是分布式数据集合。将其视为一组指向集群中实际数据位置的指针。

DStream.foreachRDD 是 Spark Streaming 中的“输出运算符”。它允许您访问 DStream 的底层 RDD 来执行对数据进行实际操作的操作。例如,使用 foreachRDD 您可以将数据写入数据库。

这里需要注意的是 DStream 是一个有时间限制的集合。让我将其与经典集合进行对比:获取用户列表并对其应用 foreach:

val userList: List[User] = ???
userList.foreach{user => doSomeSideEffect(user)}

这会将副作用函数 doSomeSideEffect 应用于 userList 集合的每个元素。

现在,假设我们现在不认识所有用户,因此我们无法构建他们的列表。相反,我们有一个用户流,就像人们在早高峰期间进入咖啡店一样:

val userDStream: DStream[User] = ???
userDstream.foreachRDD{usersRDD =>
usersRDD.foreach{user => serveCoffee(user)}
}

请注意:

  • DStream.foreachRDD 为您提供一个 RDD[User]不是单个用户。回到我们的咖啡示例,这是在某个时间间隔内到达的用户的集合。
  • 为了访问集合的单个元素,我们需要对RDD进行进一步的操作。在本例中,我使用 rdd.foreach 为每个用户提供咖啡。

考虑执行:我们可能有一群咖啡师在煮咖啡。这些是我们的执行者。 Spark Streaming 负责制作一小批用户(或订单),Spark 会将工作分配给咖啡师,以便我们可以并行制作咖啡并加快咖啡服务速度。

关于apache-spark - DStream.foreachRDD 函数的含义是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36421619/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com