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)

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值