【问题标题】:Where does spark store state for persist?火花存储状态在哪里持续存在?
【发布时间】:2018-11-08 18:27:53
【问题描述】:

我正在尝试了解 Dataset#persist 在 spark 中发生变异的状态。然而,我最初认为我应该将返回值用于下一个操作;看来这是对同一实例的引用,而状态实际上在同一 Dataset 内发生了变化。

这是否意味着 spark 实际上正在改变数据集的状态?也就是说,这是否意味着数据集不是纯粹的功能,因为它保持可变状态?或者,这是否与会话有关?如果是这样,再一次;从功能上讲,这意味着即使是通过代理,数据集仍然包含可变状态。

scala> var x = sc.parallelize(List(1, 2, 3)).toDS
x: org.apache.spark.sql.Dataset[Int] = [value: int]

scala> x.explain()
== Physical Plan ==
*(1) SerializeFromObject [input[0, int, false] AS value#25]
+- Scan ExternalRDDScan[obj#24]

scala> var y = x.persist();
y: org.apache.spark.sql.Dataset[Int] = [value: int]

scala> y.explain();
== Physical Plan ==
*(1) InMemoryTableScan [value#25]
   +- InMemoryRelation [value#25], true, 10000, StorageLevel(disk, memory, deserialized, 1 replicas)
         +- *(1) SerializeFromObject [input[0, int, false] AS value#25]
            +- Scan ExternalRDDScan[obj#24]

scala> x.explain();
== Physical Plan ==
*(1) InMemoryTableScan [value#25]
   +- InMemoryRelation [value#25], true, 10000, StorageLevel(disk, memory, deserialized, 1 replicas)
         +- *(1) SerializeFromObject [input[0, int, false] AS value#25]
            +- Scan ExternalRDDScan[obj#24]

scala> y.unpersist();
res6: org.apache.spark.sql.Dataset[Int] = [value: int]

scala> x.explain();
== Physical Plan ==
*(1) SerializeFromObject [input[0, int, false] AS value#25]
+- Scan ExternalRDDScan[obj#24]

scala> y.explain();
== Physical Plan ==
*(1) SerializeFromObject [input[0, int, false] AS value#25]
+- Scan ExternalRDDScan[obj#24]

【问题讨论】:

    标签: apache-spark


    【解决方案1】:

    这是否意味着 spark 实际上正在改变数据集的状态?也就是说,这是否意味着数据集不是纯粹的函数,因为它保持可变状态?

    没有

    或者,这是否与会话相关联?

    是的。具体来说,它使用会话的SharedState 及其CacheManager

    从功能上讲,这意味着即使是通过代理,数据集仍然包含可变状态。

    无论如何。 Spark 中的不变性是一个务实而非教条的决定,这种行为更像是一种规则而不是例外。

    【讨论】:

    • 谢谢。我的好奇心需要发痒。我刚刚假设,因为 api 返回了另一个数据集,该方法是纯功能性的。我很尴尬地错误地尝试将这件事告诉同事。
    猜你喜欢
    • 1970-01-01
    • 2022-08-15
    • 2021-09-27
    • 1970-01-01
    • 2012-04-07
    • 2011-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多