Spark 中的 UpdateStateByKey 是否将数据混洗
Does UpdateStateByKey in Spark shuffles the data across
我是 Spark 的新手,我想了解在调用 updateStateByKey 之前是否需要按键聚合 DStream 数据?
我的应用程序基本上使用 Spark Streaming 计算每秒的单词数,我在进行状态完整更新之前执行了几个映射操作,如下所示,
val words = inputDstream.flatMap(x => x.split(" "))
val wordDstream = words.map(x => (x, 1))
val stateDstream = wordDstream.updateStateByKey(UpdateFunc _)
stateDstream.print()
说在第二次 Map 操作之后,由于不同的分区,相同的键(词)可能会出现在工作节点上,所以我假设 updateStateByKey 方法在内部将键值洗牌并聚合为 Seq[Int] 并调用 updateFunc .我的假设正确吗?
正确:正如您在方法签名中看到的那样,它采用可选的 partitionNum/Partitioner 参数,表示缩减器的数量,即状态更新器。这会导致随机播放。
此外,我建议明确地在此处放置一个数字,否则 Spark 可能会显着降低您尝试 运行 本地任务相对于 HDFS 检查点文件块位置的任务的并行性
updateStateByKey() 不会打乱状态,而是将新数据带到包含相同键状态的节点。
Link 到 Tathagat 对类似问题的回答:https://www.mail-archive.com/user@spark.apache.org/msg43512.html
我是 Spark 的新手,我想了解在调用 updateStateByKey 之前是否需要按键聚合 DStream 数据?
我的应用程序基本上使用 Spark Streaming 计算每秒的单词数,我在进行状态完整更新之前执行了几个映射操作,如下所示,
val words = inputDstream.flatMap(x => x.split(" "))
val wordDstream = words.map(x => (x, 1))
val stateDstream = wordDstream.updateStateByKey(UpdateFunc _)
stateDstream.print()
说在第二次 Map 操作之后,由于不同的分区,相同的键(词)可能会出现在工作节点上,所以我假设 updateStateByKey 方法在内部将键值洗牌并聚合为 Seq[Int] 并调用 updateFunc .我的假设正确吗?
正确:正如您在方法签名中看到的那样,它采用可选的 partitionNum/Partitioner 参数,表示缩减器的数量,即状态更新器。这会导致随机播放。
此外,我建议明确地在此处放置一个数字,否则 Spark 可能会显着降低您尝试 运行 本地任务相对于 HDFS 检查点文件块位置的任务的并行性
updateStateByKey() 不会打乱状态,而是将新数据带到包含相同键状态的节点。
Link 到 Tathagat 对类似问题的回答:https://www.mail-archive.com/user@spark.apache.org/msg43512.html