persist 并不意味着您将文件保存到磁盘 - 这意味着您将其缓存在内存中(或内存和磁盘,在会话期间,取决于您选择的存储级别 - 通常您不会坚持使用 MEMORY_AND_DISK - 见下文)。来自 R 世界,缓存/持久化是一个奇怪的概念,因为当然在 R 中,当你读取一个文件时,它就存在于内存中。但在 SparkR 或 Spark 中并非如此 - 如果您没有明确地将数据帧缓存/持久保存在内存中,下次您在同一会话中使用数据帧(例如在下一个命令中)时,它将再次从文件中读取数据帧以及所有内容会很慢。缓存的意义在于,在对其进行多次操作之前,您将其保存在内存中,例如在运行机器学习算法之前。
所以,为了回答您的问题,如果您想在新的 shell 中使用相同的数据框,您必须再次读取 csv 文件,或者为了更快地加载,您第一次将数据框保存为 json 或 parquet 格式您从 csv 文件中读取并第二次加载为 json 或 parquet(即当您打开新 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")