2016-07-21 1 views
1

안녕하세요 저는 Spark가 Kafka에서 들어오는 데이터를 처리하여 해적판 검색에 StreamingKMeans를 적용 할 수있는 배포를 계획하고 있습니다.spark가 mapWithState로 여러 KMeans를 스트리밍

그러나 Kafka 항목에서 들어오는 데이터는 다양한 KMeans 모델 (주)을 필요로하는 다양한 데이터 구조를 정의하는 다양한 소스에서 도착합니다. 따라서 들어오는 개별 RDD의 모든 항목은 "키"필드 (기본적으로 단일 이벤트 처리가 필요함)를 기반으로 자체 KMeans 모델을 통과해야합니다.

Spark에서 이러한 유형의 처리를 수행 할 수 있습니까? 그렇다면 스파크 병렬성을 결국 사용합니까? 저는 Spark와 Scala의 초보자이고 뭔가 빠뜨린 것 같은 기분입니다.

미리 감사드립니다.

업데이트 : 현재이 문제를 해결하기 위해 보인다 mapWithState 운영자로 찾고 있어요

. 질문 : StreamingKmeans 모델을 상태에 직접 저장할 수 있습니까? 그렇지 않으면 나는 centroid를 저장하고 값 비싼 상태 업데이트 기능에 새 모델을 인스턴스화해야 할 것입니다.

답변

1

Spark에서 이러한 유형의 처리를 수행 할 수 있습니까? 그렇다면 스파크 병렬성을 결국 사용합니까?

이론적으로 이러한 유형의 처리가 가능하며 분산 처리의 이점을 누릴 수 있지만 사용하려는 도구가 아닙니다.

StreamingKMeans은 RDD에서 작동하도록 설계된 모델이며 Spark은 중첩 변환을 지원하지 않으므로 상태 변환에서 사용할 수 없습니다.

키 집합이 낮은 카디널리티를 가지며 모든 값이 앞면에 알려지면 키로 split RDDs 수 있으며 키마다 별도의 모델을 유지할 수 있습니다.

그렇지 않은 경우 StreamingKMeans을 제 3 자 로컬 및 직렬 가능 K- 평균 모델로 바꿀 수 있으며 mapWithState 또는 updateStateByKey의 조합으로 사용할 수 있습니다. 일반적으로 전체 병렬 처리를 줄이지 않고도 분산 버전을 사용하는 것보다 훨씬 효율적입니다.

+0

감사합니다. 일반적으로이 응용 프로그램 계층에서 데이터를 가져 오는 원본에 따라 키가 예측할 수 없으며 런타임에 다른 응용 프로그램 계층에서 Kafka 원본이 추가됩니다. 제 3 자 옵션 (any?)으로 가거나 플린 크 (Flink)로 이사하는 것에 대한 귀하의 조언은 무엇입니까? 플 랭크가 내 의견으로는이 케이스에 더 적합한 것처럼 보입니다 ... – Peterdeka

+1

어쩌면 내가 오해했을 텐데, 제 3의 파티와 함께 ​​당신은 스파크와 친구들을 사용하지 않는다는 것을 의미합니까?! 그게 내 첫 선택 사항 이었어 ... : D – Peterdeka

+0

나는 여기에 편향되어있다. 나는 Flink를 사용해 보았고 API 디자인이 마음에 들지 않았습니다. AFAIK는이 특별한 시나리오를 해결할 수있는 방법을 제공하지 않습니다. 나는 틀릴 수 있었다. 로컬 라이브러리에 관해서는 - 문서는 훌륭하지만 Elki는 일반적으로 괜찮습니다. – zero323

관련 문제