SparkR filterRDD 和 flatMap 不工作

Posted

技术标签:

【中文标题】SparkR filterRDD 和 flatMap 不工作【英文标题】:SparkR filterRDD and flatMap not working 【发布时间】:2015-07-15 11:11:28 【问题描述】:

在花了很长时间研究如何安装 SparkR 之后,我认为该软件包可能存在一些问题......

请记住,我是新手,所以不确定我是否做对了。

从我安装了 R 和 JDK 的全新 EC2 ubuntu 64 位实例

我 git 克隆了 apache spark repo 并使用:

git clone https://github.com/apache/spark.git
cd spark
build/mvn -DskipTests -Psparkr package

然后我更改了我的.Rprofile 以通过包含以下几行来引用 R 目录....

Sys.setenv(SPARK_HOME="/home/ubuntu/spark")
.libPaths(c(file.path(Sys.getenv("SPARK_HOME"), "R", "lib"), .libPaths()))

然后在启动 R 之后,我尝试通过给定 here 的快速入门指南运行

以下是我采取的以下步骤...

 R> library(SparkR)
 R> sc <- sparkR.init(master="local")
 R> textFile <- SparkR:::textFile(sc, "/home/ubuntu/spark/README.md")
 R> cc <- SparkR:::count(textFile)
 R> t10 <- SparkR:::take(textFile,10)

到这里为止一切正常...下面的行不起作用...

 R> SparkR:::filterRDD(textFile, function(line) grepl("Spark", line))
 Error: class(objId) == "jobj" is not TRUE

 R> traceback()
 7: stop(sprintf(ngettext(length(r), "%s is not TRUE", "%s are not all TRUE"), 
   ch), call. = FALSE, domain = NA)
 6: stopifnot(class(objId) == "jobj")
 5: callJMethod(object@jrdd, "toString")
 4: paste(callJMethod(object@jrdd, "toString"), "\n", sep = "")
 3: cat(paste(callJMethod(object@jrdd, "toString"), "\n", sep = ""))
 2: function (object) 
    standardGeneric("show")(x)
 1: function (object) 
    standardGeneric("show")(x)

下面是另一个不起作用的示例。

 R> SparkR:::flatMap(textFile,
         function(line) 
            strsplit(line, " ")[[1]]
               )
  Error: class(objId) == "jobj" is not TRUE

以下是我的会话信息...

 R> > sessionInfo()
 R version 3.2.0 (2015-04-16)
 Platform: x86_64-pc-linux-gnu (64-bit)
 Running under: Ubuntu 14.04.2 LTS

 locale:
  [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C              
  [3] LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8    
  [5] LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8   
  [7] LC_PAPER=en_US.UTF-8       LC_NAME=C                 
  [9] LC_ADDRESS=C               LC_TELEPHONE=C            
 [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C       

 attached base packages:
 [1] stats     graphics  grDevices utils     datasets  methods   base     

 other attached packages:
 [1] SparkR_1.4.0

这里的任何帮助将不胜感激......

【问题讨论】:

【参考方案1】:

所以这实际上是 SparkR 中 RDD 的 show 方法中的一个错误,我已在 https://issues.apache.org/jira/browse/SPARK-7512 记录了这一点

但是,此错误不应以任何方式影响您的计算。所以如果你改为使用

filteredRDD <- SparkR:::filterRDD(textFile, function(line) grepl("Spark", line))

那么错误消息应该会消失

【讨论】:

以上是关于SparkR filterRDD 和 flatMap 不工作的主要内容,如果未能解决你的问题,请参考以下文章

同时使用 SparkR 和 Sparklyr

使用 SparkR 分组百分位数

转+修正在Windows和Rstudio下本地安装SparkR

无法登录sparkR docker容器

SparkR针对mysql的数据读写操作实现

使用 SparkR 计算地理距离