Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在sparkR shell中加载持久化数据帧_R_Apache Spark_Sparkr - Fatal编程技术网

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

如何在sparkR shell中加载持久化数据帧,r,apache-spark,sparkr,R,Apache Spark,Sparkr,上下文 我在sparkr版本is1.5.2中做一些工作 我正在数据帧中加载一个csv文件 并使用sparkr中的persist命令将该数据帧存储在磁盘上 现在我关闭该会话(sparkrshell) 一天之后,当我打开新的sparkrshell 问题 如何加载该数据帧或如何使用该数据帧进行进一步操作 错误 我尝试使用动作命令,但没有完成。这是一个错误 “找不到对象” 请帮助我找到解决方案。持久化并不意味着您正在将文件保存到磁盘,而是意味着您正在将其缓存到内存中(或内存和磁盘,在会话期间,取决于

上下文

我在
sparkr
版本is
1.5.2
中做一些工作

  • 我正在数据帧中加载一个csv文件
  • 并使用
    sparkr
    中的persist命令将该数据帧存储在磁盘上
  • 现在我关闭该会话(
    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")