SparkR:Error in if(is.na(object)){: 参数长度为零

SparkR:Error in if(is.na(object)) {: 参数长度为零

SparR:Error in if (is.na(object)) { : argument is of length zero

开门见山:

因为我在运行sparkR的时候发现程序报了如下错误:
在这里插入图片描述
这个看起来是if语句中调用了is.na()方法,然后因为没有传入参数吧,接着程序报错。

排除问题的过程

获取程序当时报错的异常数据,在程序之中打印运行过程日志,逐个定位到错误代码(这样比较低效,但是这样真的很管用,在此之前我发现了程序里面有大量调用了is.na()方法的代码,检查这里面的参数真的是太痛苦了)

然后我就定位到一行代码类似于:

data <- data[width != " "]]

类似如上的代码报错了(这段代码在R的运行环境里面是不会报错,但是在我的sparkR中的dapply()函数里面是会报错的)
测试数据如下:
在这里插入图片描述
准备了十行三列的空数据
程序代码如下:

dataFrame <- createDataFrame(data)
res <- dapply(dataFrame,function(x){
  library(data.table)
  res <- data.table(x)
  res <- res[width!=""]
  res
},schema(dataFrame))

showDF(res)

使用showDF()只是做一个action的操作,这样的话可以让程序执行。执行结果如下:
在这里插入图片描述
是的,它报错了。这个时候就要去思考有没有什么其它的办法可以替代了。引起这个原因就是width列全都是NA哪怕里面有一个非NA值,程序都不会报错,所以,然后,对于这个空值的还不好处理,所以最后我打算在dapply函数之外进行操作。操作如下:

dataFrame <- createDataFrame(data)
res <- dapply(dataFrame,function(x){
  library(data.table)
  res <- data.table(x)
 # res <- res[width!=""]
  res
},schema(dataFrame))
res <- filter(res,res$width!="")
showDF(res)

或者给这个插入一条假数据,最后程序执行完毕的时候删除

发布了56 篇原创文章 · 获赞 7 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/OldDirverHelpMe/article/details/103818440