0

現在、データ フレームに強制されている NULL 値に関連する以下のエラーに直面しています。データセットにはnullが含まれていますが、 is.na() と is.null() 関数の両方を試して、null値を別のものに置き換えました。データは hdfs に保存され、pig.hive 形式で保存されます。以下のコードも添付しました。キーから v[,25] を削除すると、コードは正常に機能します。

コード:

AM = c("AN");
UK = c("PP");
sample.map <- function(k,v){
 key <- data.frame(acc = v[!which(is.na(v[,1],1], 
                   year = substr(v[!which(is.na(v[,1]),2],1,4), 
                   month = substr(v[!which(is.na(v[,1]),2],5,6))
 value <- data.frame(v[,3],count=1)
 keyval(key,value)
}

sample.reduce <- function(key,v){
  AT <- sum(v[which(v[,1] %in% AM=="TRUE"),2])
  UnknownT <- sum(v[which(v[,1] %in% UK=="TRUE"),2])
  Total <- AT + UnknownT
  d <- data.frame(AT,UnknownT,Total)
  keyval(key,d)
 }
 out <- mapreduce(input ="/user/hduser/input",
             output = "/user/hduser/output",
             input.format = make.input.format("pig.hive", sep = "\u0001")                            
             output.format = make.output.format("csv", sep = ","),
             map= sample.map)
             reduce = sample.reduce)

エラー:

Warning in asMethod(object) : NAs introduced by coercion 
Warning in split.default(1:rmr.length(y), unique(ind), drop = TRUE) :   data length is not a multiple of split variable 
Warning in rmr.split(x, x, FALSE, keep.rownames = FALSE) :   number of items to replace is not a multiple of replacement length Warning in        split.default(1:rmr.length(y), unique(ind), drop = TRUE) :   
data length is not a multiple of split variable 
Warning in rmr.split(v, ind, lossy = lossy, keep.rownames = TRUE) :   number of items to replace is not a multiple of replacement length 
Error in as(x, class(k)) :    
no method or default for coercing “NULL” to “data.frame” 
Calls: <Anonymous> ... apply.reduce -> c.keyval -> reduce.keyval -> lapply -> FUN -> as No traceback available 

更新 サンプル データを追加し、上記のコードを編集しました。お役に立てれば!

サンプルデータ:

NULL,"2014-03-14","PP"
345689202,"2014-03-14","AN"
234539390,"2014-03-14","PP"
123125444,"2014-03-14","AN"
NULL,"2014-03-14","AN"
901828393,"2014-03-14","AN"
4

1 に答える 1

1

最近確認されたいくつかの問題があります。デフォルトでこれを処理できないas理由はわかりませんが、S4 メソッドを呼び出して変換を処理するものを変更できます。ascoerceas.data.frame

setMethod("coerce",c("NULL","data.frame"), function(from, to, strict=TRUE) as.data.frame(from))
[1] "coerce"
as(NULL,"data.frame")
data frame with 0 columns and 0 rows
于 2015-12-09T20:24:42.093 に答える