2016-09-10 2 views
0

4 노드 H2O 클러스터에 20 개의 프레임이 있다고 가정 해 봅시다. a1..a5, b1..b5, c1..c5, d1..d5. 그리고 그것들을 하나의 커다란 프레임으로 결합하여 모델을 만듭니다.rbind 이전의 cbind 또는 cbind 전 rbind?

h2o.rbind(
    h2o.cbind(a1, b1, c1, d1), 
    h2o.cbind(a2, b2, c2, d2), 
    h2o.cbind(a3, b3, c3, d3), 
    h2o.cbind(a4, b4, c4, d4), 
    h2o.cbind(a5, b5, c5, d5) 
) 

또는 다음 열 첫 번째 행을 결합 : 인수를 위해서

h2o.cbind(
    h2o.rbind(a1, a2, a3, a4, a5), 
    h2o.rbind(b1, b2, b3, b4, b5), 
    h2o.rbind(c1, c2, c3, c4, c5), 
    h2o.rbind(d1, d2, d3, d4, d5) 
) 

, 1

는 더 나은 열 세트, 다음 행을 결합하여 결합하는 것입니다/2/3/4/5는 각각 1 개월 동안의 데이터를 나타낼 수 있으므로 별도로 가져온 것입니다. 그리고 a/b/c/d는 서로 다른 기능 세트이며, 다시 가져온 이유를 다시 설명합니다. 예를 들어 a1 ..a5에는 1728 개의 열이 있고 b1..b5에는 113 개의 열이 있고 c1..c5에는 360 개의 열이 있고 d1..d5는 단일 열 (모델링 할 응답)입니다. (나는 H2O가 컬럼 데이터베이스이기 때문에 a/b/c/d에있는 컬럼들의 상대적인 수는 중요하지 않다고 생각한다.)

"더 좋다"는 말은 더 빨리 의미하지만, 사용법의 차이점 하나라도 알고 있다면 좋을 것입니다 : 저는 빅 프레임 (Big Data) 케이스에 관심이 있습니다. 결합 된 프레임은 단지 AA 메모리에 맞지 않습니다. 단일 노드.

+0

항상 downvote에 대한 의견을 수신하는 데 유용합니다. 그렇지 않으면, 나는 명확하지 않은 것을 알기 위해 어떻게해야 하는가? –

답변

2

저는 답변이 다음과 같다고 확신합니다. 중요하지 않습니다.

포인트 1 : 질문의 두 예제는 동일합니다. 이는 h2o.cbind()와 h2o.rbind()가 모두 lazy evaluation을 사용하기 때문입니다. 따라서 어느 쪽이든 즉시 반환되고 일부 작업을 수행 할 때까지 아무 일도 일어나지 않습니다. (필자는 새로운 프레임의 생성을 강제로 nrow() 또는 ncol()를 사용했습니다 - 그것은 또한 나를 내가 기대했던 가지고 있음을 확인할 수 있습니다.) 2

포인트 : 내가 H2O에 의해 통보 한 개발자는 데이터 (CPU 또는 메모리)가 차이가 없기 때문에 데이터가 복사 될 수 있기 때문입니다.

포인트 3 : 합리적으로 큰 cbind/rbinds에서는 17GB (압축 된 크기)의 최종 프레임 크기와는 큰 차이가 없었습니다. 이것은 엄격한 것은 아니지만, nrow() 명령이 사본을 완료하는 데 30 ~ 40 초 이상 기다리지 않았습니다.

보너스 팁 : 점 1에 이어, 당신이 구성 부분을 삭제 전에 일어날 사본을 강제로 nrow() (또는 무엇이든)를 호출 필수적이다. all = rbind(parts)을 수행 한 다음 h2o.rm(parts)을 입력하면 nrow(all)이 표시되며 오류가 발생합니다 (데이터가 손실되어 다시 가져와야 함).

관련 문제