2016-09-19 3 views
4

저는 쪽매 세공 파일에있는 500K 행 스파크 DataFrame을 가지고 있습니다. Spark (RStudio and R 3.3.1)에서 spark 2.0.0과 SparkR 패키지를 사용하고 있습니다. 모두 4 코어와 8GB RAM을 갖춘 로컬 시스템에서 실행됩니다.SparkR의 수집이 왜 그렇게 느린가요?

R에서 작업 할 수있는 데이터 집합의 생성을 용이하게하기 위해 collect() 메서드를 사용하여 Spark DataFrame을 R로 가져옵니다. 이렇게하려면 약 3 분이 소요되며 이는 읽는 데 걸리는 시간보다 훨씬 길다. data.table 패키지를 사용하여 동일한 크기의 CSV 파일

가 인정 하듯이, 마루 파일은 압축 및 압축 해제에 필요한 시간은 문제의 일부가 될 수 있지만, 나는 수집 방법이 설명의 방법으로 특히 천천히, 그리고 작은 것에 대해 인터넷에서 다른 의견을 발견했습니다.

나는 sparklyr에서 동일한 작업을 시도했으며 훨씬 빨라졌습니다. 불행히도 sparklyr에는 SparkR만큼 쉽게 조인과 필터 내부에 날짜 경로를 수행 할 수있는 기능이 없으므로 SparkR을 사용하여 막혔습니다. 또한 두 패키지를 동시에 (즉, SparkR 호출을 사용하여 쿼리를 실행 한 다음 스파크 릴을 사용하여 해당 스파크 오브젝트에 액세스 할 수 있음) 두 가지를 사용할 수 있다고 생각하지 않습니다.

비슷한 경험을 가진 사람이 있습니까? SparkR의 collect() 메서드가 상대적으로 느린 이유에 대한 설명이 있습니까?

답변

2

@Will

나는 다음과 같은 댓글이 실제로 당신의 질문에 대한 대답인지 아닌지 모르지만 스파크가 게으른 작업을 수행합니다. Spark (또는 SparkR)에서 수행 된 모든 변환은 실제로 수행 할 논리 계획을 작성하는 데이터를 작성하지 않습니다.

collect와 같은 액션을 실행하면 원본 RDD에서 데이터를 직접 가져와야합니다 (캐시 된 데이터 또는 지속 된 데이터가 없다고 가정).

데이터가 충분히 크지 않고 로컬 R에서 쉽게 처리 할 수 ​​있으면 SparkR을 사용할 필요가 없습니다. 다른 솔루션은 자주 사용하기 위해 데이터를 캐시 할 수 있습니다.

+0

500K 라인 예제는 한 가지 예일뿐 300M 행이있는 테이블에서 가져온 것입니다. Spark은 내 설정에서이 작업을 수행해야하지만 Spark와 R 사이의 데이터 이동 속도가 매우 느립니다. –

1

짧은 : 직렬화/역 직렬화가 매우 느립니다. 내 블로그에 게시 된 게시물을 참조하십시오. http://dsnotes.com/articles/r-read-hdfs 그러나 sparkR 및 sparklyr 모두 똑같이 느려야합니다.

+1

설명과 링크를 제공해 주셔서 감사합니다. 이것은 R과 Spark 사이의 현재 링크에서 알려진 약점 인 것으로 보이는데, 이는 Python에서 문제가 적지 만 여전히 존재합니다. –

+1

또한, SparkR을 사용하는 데 180 초, Sparklyr가 9 초 걸린다는 것을 확인했습니다. 여기 이상한 일이 있습니다. –

+0

잘 알고 있습니다. 보세요. 프로토콜에 새로운 것을 알려주세요. –

관련 문제