MLlib의 행렬 인수 분해를 사용하여 사용자에게 항목을 추천하고 있습니다. 나는 M = 2,000 만 명의 사용자와 N = 50k 항목의 큰 암묵적인 상호 작용 행렬에 대해 가지고있다. 모델을 교육 한 후 각 사용자에 대한 짧은 목록 (예 : 200)의 권장 사항을 얻고 싶습니다. 나는 MatrixFactorizationModel
에서 recommendProductsForUsers
을 시도했으나 매우 느립니다 (9 시간 뛰었지만 아직 끝나지 않았습니다. 저는 8 명의 메모리가있는 50 명의 실행 프로그램을 테스트 중입니다). recommendProductsForUsers
은 모두 사용자 항목 상호 작용 M*N
을 계산하고 각 사용자에 대해 최상위 순위를 얻으므로 필요합니다.Spark MLLib의 대형 데이터 세트에 대한 공동 필터링 속도 향상
내가, 내가이 시간에 완료 할 수 있습니다 또는 여기 flatmap
https://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)
당신에게 긍정적 인 집행자 당 더 많은 메모리와 오버 헤드 스파크 메모리를 추가하는 시도? 어쩌면 디스크 캐시를 실제로 자주 공격 할 수도 있습니다. – stholzm