上下文
我正在sparkr
版本中进行一些工作1.5.2
。
sparkr
中的persist命令将该数据框存储在磁盘上。 sparkr shell
)。 sparkr shell
问题
我如何加载该数据框或如何使用该数据帧进行进一步操作?
错误
我尝试使用动作命令但是没有完成。它给出了错误
"找不到对象"。
请帮我找到解决方案。
答案 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")