如何在sparkR shell中加载持久化数据框

时间:2015-12-09 08:35:18

标签: r apache-spark sparkr

上下文

我正在sparkr版本中进行一些工作1.5.2

  • 我正在数据框中加载一个csv文件
  • 并使用sparkr中的persist命令将该数据框存储在磁盘上。
  • 现在我关闭那个会话(sparkr shell)。
  • 一天后我打开新的sparkr shell

问题

我如何加载该数据框或如何使用该数据帧进行进一步操作?

错误

我尝试使用动作命令但是没有完成。它给出了错误

  

"找不到对象"。

请帮我找到解决方案。

1 个答案:

答案 0 :(得分:3)

persist并不意味着您将文件保存到磁盘 - 这意味着您在会话期间将其缓存在内存(或内存和磁盘)中,具体取决于您选择的存储级别 - 通常你不会坚持到MEMORY_AND_DISK - 见下文)。来自R世界,缓存/持久化是一个奇怪的概念,因为当然在R中,当你读取文件时,你将它存储在内存中。但在SparkR或Spark中并非如此 - 如果您没有明确地将数据帧缓存/持久存储在内存中,下次在同一会话中使用数据帧时(例如在下一个命令中),它将再次从文件中读取数据帧会很慢。缓存的重点在于,在运行多次之前将其存储在内存中,例如在运行机器学习算法之前。

因此,要回答您的问题,如果您想在新shell中使用相同的数据帧,则必须再次读取csv文件,或者为了加快加载速度,您可以在第一次将数据帧保存为json或者镶木地板格式你从csv文件读取并第二次加载为json或镶木地板(即当你打开新的shell时)。

注意:cache()persist(MEMORY_ONLY)相同。您可以在以下时间使用persist(MEMORY_AND_DISK)

  • 您使用其他一些输入计算数据框
  • 计算出的数据帧不适合内存

如果您保留计算的数据帧,则计算不适合内存的部分并将其保存到磁盘,并在需要时从磁盘访问。如果不保留计算的数据帧,那么不适合内存的部分将从其原始输入中重新计算。

要回答原始问题,要将数据帧保存到磁盘,您可以执行以下操作: see documentation on write.df

write.df(df, "myfile", "parquet", "overwrite")

加载你会做:see documentation on read.df

df <- read.df(sqlContext, "path/to/file", source = "parquet")