【问题标题】:SparkR says it can't find function read.dfSparkR 说它找不到函数 read.df
【发布时间】:2016-10-05 01:30:15
【问题描述】:

正如标题所说的那样。每次我在我正在使用的 RedHat 机器上启动 SparkR shell 并尝试使用函数 read.df() 时,它都会说找不到该函数。如果有帮助,我正在使用 SparkR 2.0。

更具体地说,这是我尝试输入的内容:

data <- read.df(sqlContext, "/path/to/the/file", "parquet")

编辑:为了澄清,这里是确切的情况:

> data <- df.read("valid/path/to/parquet/file", "parquet") Error: could not find function "df.read"

【问题讨论】:

  • 你加载 sparkR 包了吗?
  • 我想是的......它说它加载成功。对于我如何检查以确保一切都在那里,您有什么建议吗?

标签: apache-spark centos redhat sparkr


【解决方案1】:

不再需要 sqlContext 参数 read.df("./examples/src/main/resources/people.parquet", "parquet")

查看https://spark.apache.org/docs/latest/api/R/read.df.html

【讨论】:

  • 我已经试过了,结果还是一样!不过还是谢谢。
  • 能否请您显示错误截图和代码
  • 是的,我已经在其中包含了确切的错误。我不会发布太多具体信息,因为我想让我公司的 IP 保密。
【解决方案2】:

我发现了问题所在,并认为我会发布它以防其他人遇到类似问题。基本上我打开了 R shell,然后运行了install.packages("devtools")。这让我可以像这样直接从 github 安装 sparkR 包:devtools::install_github("/apache/spark/R/pkg")。那行得通。还有一些其他的小细节,比如使用 R 的 setRepositories() 函数来确保我已启用所有 repos 以下载 devtools

不过,我以前做过所有这些。真正的问题是三方面的:

  1. 我输入了错误的函数。有很多来自不同版本的相互冲突的文档(我注意到与 Spark 相关的努力是一种趋势;在信任任何文档之前检查版本!)。正确的语法是 read.df("/path/to/file", "parquet"),其中 "parquet" 可以是 json 或您正在读取的任何文件类型。

  2. 我打开 R shell 后需要附加 sparkR 包!!!我对 R 和 sparkR 真的很陌生,老实说 99% 我正在尝试做的事情,所以我实际上并不知道 R 不会在会话开始时自动加载所有可用的包。实际上,它没有意义。 所以我必须在 shell 提示符中输入require("SparkR"),然后才能真正读取任何数据帧。 (注意"SparkR" 中的 S 是大写的;我认为这可能会导致一些混乱,因为在我为得出这个解决方案所做的所有谷歌搜索和研究以及通过 API 进行梳理时,SparkR 中的 s 很多时候是小写。)

  3. 我没有初始化 SparkSession。 (Duh!)一旦你需要 SparkR 包,这是(强制性的)下一步,否则你将无法做任何与 Spark 相关的事情。可以通过在 R shell 提示符中键入 sparkR.session() 来初始化会话。请注意,由于某种原因,sparkR 中的 s 在这里是小写的!这真的很令人困惑,我希望在未来的更新中能够修复这种不一致。

现在我可以使用以下语法读取任何我想要的数据帧:

data &lt;- read.df("/valid/path/to/parquet/file", "parquet")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-25
    相关资源
    最近更新 更多