2014-03-06 4 views
1

나는 이벤트와 같은 데이터를 저장할 C * 열 패밀리가 있습니다. 이 방법으로 CQL3에서 만든 열 가족 :스파크 + 카산드라. 클러스터링 순서 문제가있는 복합 키

CREATE TABLE event (
    hour text, 
    stamp timeuuid, 
    values map<text, text>, 
    PRIMARY KEY (hour, stamp) 
) WITH CLUSTERING ORDER BY (stamp DESC) 

파티션 설정이 Murmur3 파티션 프로그램입니다. 그런 다음 Calliope 라이브러리를 통해 해당 데이터에 대한 스파크 쿼리를 작성하려고했습니다. 클러스터링 키 ('시간'필드)에 대한 1000 개 이상의 레코드가 내 경우에는

  1. 하지만 반응은 키 당 처음 1000 개 개의 레코드를 포함 : 결과에서 나는 두 가지 문제를 받게됩니다. 더 많은 데이터를 받기 위해 쿼리에서 페이지 크기를 늘릴 수는 있지만, 이해할 수있는 한, 데이터를 통과하여 슬라이스 할 페이징 인의 작업이어야합니다.
  2. 각 레코드를 두 번 이상 수신합니다.

첫 번째 문제 Cil3 드라이버가 데이터에 페이지 매김을해야한다는 Calliope 작성자의 대답을 얻습니다. 그는 DataStax article을 읽도록 권합니다. 하지만 드라이버에 올바른 지침을 사용하여 쿼리를 작성하는 방법에 대한 답을 찾을 수 없습니다.

두 번째 문제에 대해 카산드라의 Hadoop 커넥터에 문제가 있음을 발견했습니다. < 1.2.11. 하지만 C * 2.0.3을 사용하고 Spark을 필요한 라이브러리 버전으로 다시 빌드합니다. 또한 Calliope 버전 0.9.0-C2-EA를 사용합니다.

이러한 문제를 해결하거나 해결 방법을 설명하는 올바른 방법을 설명하는 문서 또는 코드 샘플을 알려주십시오. 나는 C * -to-Spark 커넥터를 부적절한 방법으로 사용한다고 생각하지만 해결책을 찾을 수 없습니다.

미리 감사드립니다.

+0

"WITH CLUSTERING ORDER"절이 두 문제의 근원 인 것 같습니다. 비슷한 테이블에서 (단지 ORDER BY로 CLUSTERING하지 않고) 결과를 제한하거나 중복을 기록하지 않습니다. –

답변

0

클러스터링 키에 기본값이 아닌 정렬을 사용할 수 없습니다. 모두 올바르게 작동하면 클러스터링 키의 정렬 순서는 기본값 (ACS)입니다.

해결 방법은 기본 클러스터링 순서로 복합 키를 사용하도록 데이터 모델을 수정하는 것입니다.