【问题标题】:Cached dataset not used in LivyLivy 中未使用缓存数据集
【发布时间】:2018-08-20 16:14:10
【问题描述】:

我有一个使用 livy 提交作业的应用程序。在同一个 livy 会话中,提交了各种作业。有时这些工作可能正在处理类似的数据集,因此我想将数据从一个工作重用到另一个工作。我正在提交的作业中缓存数据集。但是每当提交一个新作业时,它并不会拾取缓存的数据集,而是重新缓存相同的数据。

缓存数据集是否依赖于变量? 例如,如果我这样做

var d1 = //make some dataset
d1.cache

在随后的另一份工作中,

var d2 = //same dataset
d2.cache

我可以期望只有一个缓存数据集,并且 d2 使用以前缓存的数据吗?目前,我在 spark 应用程序的存储部分看到单独的缓存数据。 作为参考,我使用的是 Livy 编程 API: here 提交我的工作。

【问题讨论】:

    标签: apache-spark caching livy


    【解决方案1】:

    d1 和 d2 都将在内存中创建为两个不同的数据帧/数据集。你不能指望它们是相同的,因为它们是两个不同的对象。第二件事是,Cache() 方法是 Spark 中的一种转换,它不一定会在执行语句后立即缓存对象。只有当后期某个Action(如collect、count)出现时,整个DAG才会被解析并触发缓存。

    【讨论】:

    • 我猜@user9024779 问题的症结在于,Livy 是否支持缓存? DBConnect,由 databricks 提供,其功能与 Livy 远程连接到 Spark/Databricks 的功能类似,但不允许这样做(即使在同一个工作中,在撰写此评论时,参考:docs.databricks.com/user-guide/dev-tools/…
    • 我不确定我是否理解这一点。 Livy 是一个 REST 接口,用于提交代码并进行会话管理。缓存是 Spark 的概念。
    • 非常感谢@Prashant!同意:)。由于 DBconnect 也是一个接口并且不允许在 Spark 集群上进行缓存,我想知道 Livy 是否同样不支持它(顺便说一下,我不确定 DBconnect 是否在后台使用 Livy)。谢谢:)
    • @Prashant Apache Livy 的功能定义为:“在多个作业和客户端之间共享缓存的 RDD 或数据集”。我相信问题是关于功能的含义
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 2018-06-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多