6

MLlib의 행렬 인수 분해를 사용하여 사용자에게 항목을 추천하고 있습니다. 나는 M = 2,000 만 명의 사용자와 N = 50k 항목의 큰 암묵적인 상호 작용 행렬에 대해 가지고있다. 모델을 교육 한 후 각 사용자에 대한 짧은 목록 (예 : 200)의 권장 사항을 얻고 싶습니다. 나는 MatrixFactorizationModel에서 recommendProductsForUsers을 시도했으나 매우 느립니다 (9 시간 뛰었지만 아직 끝나지 않았습니다. 저는 8 명의 메모리가있는 50 명의 실행 프로그램을 테스트 중입니다). recommendProductsForUsers은 모두 사용자 항목 상호 작용 M*N을 계산하고 각 사용자에 대해 최상위 순위를 얻으므로 필요합니다.Spark MLLib의 대형 데이터 세트에 대한 공동 필터링 속도 향상

내가, 내가이 시간에 완료 할 수 있습니다 또는 여기 flatmaphttps://github.com/apache/spark/blob/master/mllib/src/main/scala/org/apache/spark/mllib/recommendation/MatrixFactorizationModel.scala#L279-L289에 아직 9시간 후 하루도 내가 (1000 명 집행이 의심 나는 스파크 UI에서 응용 프로그램 세부에서 본 것을에서 더 많은 집행하지만를 사용하려고합니다 , 10000 개의 전체 작업과 ~ 200 개의 작업 만 완료) # 집행자를 늘리는 것 외에 추천 프로세스의 속도를 높이기 위해 조정할 수있는 다른 것들이 있습니까?

val data = input.map(r => Rating(r.getString(0).toInt, r.getString(1).toInt, r.getLong(2))).cache 
val rank = 20 
val alpha = 40 
val maxIter = 10 
val lambda = 0.05 
val checkpointIterval = 5 
val als = new ALS() 
    .setImplicitPrefs(true) 
    .setCheckpointInterval(checkpointIterval) 
    .setRank(rank) 
    .setAlpha(alpha) 
    .setIterations(maxIter) 
    .setLambda(lambda) 
val model = als.run(ratings) 
val recommendations = model.recommendProductsForUsers(200) 
recommendations.saveAsTextFile(outdir) 
+0

당신에게 긍정적 인 집행자 당 더 많은 메모리와 오버 헤드 스파크 메모리를 추가하는 시도? 어쩌면 디스크 캐시를 실제로 자주 공격 할 수도 있습니다. – stholzm

답변

1

@Jack 레이 : 여기

샘플 코드는이에 대한 답을 찾으셨습니까? 나는 약간의 것을 시도했지만 조금만 도왔다. 예를 들어

: 나는 그것을 사이에 계산을 반복 피할 becuase이 도움이

javaSparkContext.setCheckpointDir("checkpoint/"); 

을 시도했다.

또한 스파크가 완전히 8g의 RAM을 사용하는 것이

--conf spark.driver.maxResultSize=5g --conf spark.yarn.executor.memoryOverhead=4000 
관련 문제