【问题标题】:Does UpdateStateByKey in Spark shuffles the data acrossSpark 中的 UpdateStateByKey 是否将数据打乱
【发布时间】:2015-06-07 08:22:36
【问题描述】:

我是 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。我的假设正确吗?

【问题讨论】:

    标签: apache-spark spark-streaming


    【解决方案1】:

    正确:正如您在方法签名中看到的,它采用可选的 partitionNum/Partitioner 参数,它表示减速器的数量,即状态更新器。这会导致洗牌。

    另外,我建议在此处明确输入一个数字,否则 Spark 可能会显着降低您的作业的并行度,尝试在本地运行任务时考虑到 HDFS 检查点文件块的位置

    【讨论】:

    • 谢谢亚历山德罗斯!!
    【解决方案2】:

    updateStateByKey() 不会打乱状态,而是将新数据带到包含相同键状态的节点。

    Tathagat 对类似问题的回答的链接:https://www.mail-archive.com/user@spark.apache.org/msg43512.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-09-24
      • 2017-04-23
      • 1970-01-01
      • 2017-03-06
      • 2015-02-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多