如何在sparkR shell中加载持久化数据帧
上下文 我在如何在sparkR shell中加载持久化数据帧,r,apache-spark,sparkr,R,Apache Spark,Sparkr,上下文 我在sparkr版本is1.5.2中做一些工作 我正在数据帧中加载一个csv文件 并使用sparkr中的persist命令将该数据帧存储在磁盘上 现在我关闭该会话(sparkrshell) 一天之后,当我打开新的sparkrshell 问题 如何加载该数据帧或如何使用该数据帧进行进一步操作 错误 我尝试使用动作命令,但没有完成。这是一个错误 “找不到对象” 请帮助我找到解决方案。持久化并不意味着您正在将文件保存到磁盘,而是意味着您正在将其缓存到内存中(或内存和磁盘,在会话期间,取决于
sparkr
版本is1.5.2
中做一些工作
- 我正在数据帧中加载一个csv文件
- 并使用
中的persist命令将该数据帧存储在磁盘上李>sparkr
- 现在我关闭该会话(
)李>sparkrshell
- 一天之后,当我打开新的
sparkrshell
请帮助我找到解决方案。
持久化
并不意味着您正在将文件保存到磁盘,而是意味着您正在将其缓存到内存中(或内存和磁盘,在会话期间,取决于您选择的存储级别-通常您不会持久化到内存和磁盘-请参阅下文)。来自R世界,缓存/持久化是一个奇怪的概念,因为在R中,当你读取一个文件时,它就在内存中。但在SparkR或Spark中并非如此-如果您不在内存中显式缓存/持久化数据帧,下次在同一会话中使用该数据帧时(例如,在下一个命令中),它将再次从文件中读取数据帧,并且一切都将变慢。缓存的意义在于,在对其进行多次操作之前,例如在运行机器学习算法之前,您将其存储在内存中
因此,为了回答您的问题,如果您想在新shell中使用相同的数据帧,您必须再次读取csv文件,或者为了更快地加载,您可以在第一次从csv文件读取时将数据帧保存为json或拼花格式,然后在第二次(即打开新shell时)加载为json或拼花格式
注意:cache()
与persist(仅限内存)
相同。在以下情况下,您可以使用持久化(内存和磁盘)
:
- 您使用一些其他输入来计算数据帧
- 计算的数据帧不适合内存
df
write.df(df, "myfile", "parquet", "overwrite")
df <- read.df(sqlContext, "path/to/file", source = "parquet")