나는 데에서 메모리 제한 "오류 : 크기의 벡터를 할당 할 수 없습니다 ... MB"문제 FF/ffdf 및 ffdfdply 기능을 사용.ffdfdply, 분할 및 R
나는 그룹으로 키가되어 많은 양의 데이터를 처리하는 FF와 ffdf 패키지를 사용하려고 해요. 고유 키가 같은 것을 사용하여 만든
x =
id_1 id_2 month year Amount key
1 13 1 2013 -200 11
1 13 2 2013 300 54
2 19 1 2013 300 82
3 33 2 2013 300 70
.... (10+ Million rows)
: 키 변수를 사용하여 그룹화하여 요약
x$key = as.ff(as.integer(ikey(x[c("id_1","id_2","month","year")])))
, 내가이 명령을 :
(ffdf 테이블 형식) 데이터는 다음과 같습니다 data.table의 우수한 그룹화 기능 ( this discussion에서 가져온 아이디어)를 사용하여summary = ffdfdply(x=x, split=x$key, FUN=function(df) {
df = data.table(df)
df = df[,list(id_1 = id_1[1], withdraw = sum(Amount*(Amount>0),na.rm=T), by = "key"]
df
},trace=T)
. 실제 코드에는 Amount 변수에 더 많은 함수를 적용 할 수 있지만이 경우에도 전체 ffdf 테이블을 처리 할 수는 없습니다 (테이블의 작은 하위 집합이 정상적으로 작동 함).
을주는 램의 엄청난 금액을 사용하여 ffdfdplyis 것 같아 :
Error: cannot allocate vector of size 64MB
는 또한 BATCHBYTES 도움이하지 않는 것 같습니다. ffdffply에 대한 경험이있는 사람이라면 ffdf 테이블을 미리 분할하지 않고이 문제를 해결할 수있는 다른 방법을 추천 할 수 있습니까?
는 FF/ffbase을 사용하는 방법에 대한 가장 어려운 부분은하고있다
당신은 내가 질문에 입력 실수는 iKey에 대한 권리입니다. 나는 그것을 통해 당신의 방식으로 사용하고 있지만, as.integer는 문자가 아닙니다. 위의 수정. – tanvach
필자는 ffsave/ffload를 사용하고 있기 때문에 문제가 너무 많다고 생각합니다. 많은 ff 데이터 세트를 보유하는 데 오랜 시간이 걸릴 것입니다. 내가 가져간 컬럼은 키잉 변수 (4 개의 키 컬럼이 있음)입니다. 이제 각 그룹별로 키잉을 다시 수행해야합니다. 이상적이지는 않지만 적어도 데이터는 메모리에 저장됩니다. – tanvach
요약하면 다음과 같습니다. - 요인을 사용하지 마십시오. 그것은 모든 것을 늦출 것입니다. - 가능한 한 적은 수의 열을 유지하십시오. – tanvach