복붙노트

[HADOOP] 테이블 백분위 수의 임의 샘플을 반환하기 위해 Accumulo 반복자를 작성하는 중입니다.

HADOOP

테이블 백분위 수의 임의 샘플을 반환하기 위해 Accumulo 반복자를 작성하는 중입니다.

테이블 백분위 수의 임의 샘플을 반환하기 위해 Accumulo 반복자를 작성하려고합니다.

나는 어떤 제안을 부탁드립니다.

고마워

크리스

해결법

  1. ==============================

    1.org.apache.accumulo.core.iterators.Filter를 확장하고 항목의 x %를 임의로 수락 할 수 있습니다. 다음 반복기는 임의로 5 %의 항목을 반환합니다.

    org.apache.accumulo.core.iterators.Filter를 확장하고 항목의 x %를 임의로 수락 할 수 있습니다. 다음 반복기는 임의로 5 %의 항목을 반환합니다.

    import java.util.Random;
    
    import org.apache.accumulo.core.data.Key;
    import org.apache.accumulo.core.data.Value;
    import org.apache.accumulo.core.iterators.Filter;
    
    public class RandomAcceptFilter extends Filter {
        private Random rand = new Random();
    
        @Override
        public boolean accept(Key k, Value v) {
            return rand.nextDouble() < .05;
        }
    }
    
  2. ==============================

    2.다양한 선택을 허용하기 위해 Ben Tse의 답변을 약간 확장 :

    다양한 선택을 허용하기 위해 Ben Tse의 답변을 약간 확장 :

    import java.util.Random;
    
    import org.apache.accumulo.core.data.Key;
    import org.apache.accumulo.core.data.Value;
    import org.apache.accumulo.core.iterators.Filter;
    
    public class RandomAcceptFilter extends Filter {
        private Random rand = new Random();
        private double percentToAllow;
        public static final String RATIO = "ratio";
        public static final String DEFAULT = "0.05";        
    
        @Override
        public void init(SortedKeyValueIterator<Key, Value> source, Map<String, String> options, IteratorEnvironment env) throws IOException {
            super.init(source, options, env);
            String option = options.containsKey(RATIO) ? options.get(RATIO) : DEFAULT;
            this.percentToAllow = Double.parseDouble(option);
        }
    
        @Override
        public boolean accept(Key k, Value v) {
            return rand.nextDouble() < this.percentToAllow;
        }
    }
    

    그런 다음 코드에서 반복자를 호출 할 때

    IteratorSetting itr = new IteratorSetting(15, "myIterator", RandomAcceptFilter.class);
    itr.addOption(RandomAcceptFilter.RATIO, "0.20");
    myScanner.addScanIterator(itr);
    

    분명히 경계 검사 등을 추가해야하지만 아이디어를 얻습니다.

  3. from https://stackoverflow.com/questions/21503594/i-am-looking-at-writing-an-accumulo-iterator-to-return-a-random-sample-of-a-perc by cc-by-sa and MIT license