【问题标题】:how can i load persisted data frame in sparkR shell如何在 spark shell 中加载持久数据帧
【发布时间】:2015-12-09 08:35:17
【问题描述】:

上下文

我正在sparkr 版本是1.5.2 中做一些工作。

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

问题

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

错误

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

“找不到对象”。

请帮我找出解决办法。

【问题讨论】:

    标签: r apache-spark sparkr


    【解决方案1】:

    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")
    

    【讨论】:

      猜你喜欢
      • 2021-03-07
      • 2021-04-14
      • 2016-12-31
      • 2016-01-26
      • 2021-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多