【问题标题】:How to store data in a Spark cluster using sparklyr?如何使用 sparklyr 在 Spark 集群中存储数据?
【发布时间】:2017-07-14 00:46:13
【问题描述】:

如果我连接到 Spark 集群,将一些数据复制到其中,然后断开连接,...

library(dplyr)
library(sparklyr)
sc <- spark_connect("local")
copy_to(sc, iris)
src_tbls(sc)
## [1] "iris"
spark_disconnect(sc)

那么下次连接Spark时,数据就不存在了。

sc <- spark_connect("local")
src_tbls(sc)
## character(0)
spark_disconnect(sc)

这与使用数据库的情况不同,无论连接多少次,数据都在那里。

如何在 Spark 集群中的连接之间持久化数据?

我认为sdf_persist() 可能是我想要的,但似乎不是。

【问题讨论】:

  • 这是因为数据不会在不同的 spark 会话中持续存在,如果您断开连接然后重新连接,就会发生这种情况。
  • @mtoto 谢谢。所以当你断开连接时没有办法让会话保持活动状态?
  • 你可以试试sdf_persist(storage.level = "DISK_ONLY") 吗?我不确定它是否会起作用。老实说,我从来没有用火花尝试过
  • @RichieCotton 可能只是"local" 模式下的问题。但是要连接到远程集群,您还需要在集群上安装 rstudio 服务器。
  • @Alex 集群之间没有永久性。人们似乎只是让集群无限期地运行,或者使用spark_write_parquet()spark_read_parquet() 保存/重新加载他们的数据集(比copy_to() 快得多)。

标签: r sparklyr


【解决方案1】:

从技术上讲,Spark 是一种在计算机/集群上运行以执行任务的引擎。它不是数据库或文件系统。您可以在完成后将数据保存到文件系统并在下一次会话期间加载它。

https://en.wikipedia.org/wiki/Apache_Spark

【讨论】:

  • 是的,这似乎是正确的。但是有解决方法吗?某种方法可以将 Spark 与数据库或文件系统更紧密地集成,以便每次启动 Spark 时始终可以使用仅加载的数据? ...,当然你可以在下一个会话期间加载数据。但至少根据我的经验,将数据复制到 Spark 非常耗时。
  • 好问题,我没见过这样的。我通常做的是将迭代中的数据集保存为 parquet 文件并根据需要加载它们。因此,如果您有大量数据需要很长时间才能运行,请加载它,执行一组初始工作,保存该工作,然后在您稍后开始时,加载该中间文件。
猜你喜欢
  • 1970-01-01
  • 2018-09-19
  • 1970-01-01
  • 2017-09-23
  • 2015-12-10
  • 1970-01-01
  • 2017-12-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多