Simüle edilmiş bir tıklama akışından farklı kullanıcıları tahmin etmek için HyperLogLog kullanan Java'da Spark Streaming ile bir prototip uygulaması oluşturdum.Spark Tek bir tuşla paralel paralellik
Çözümümü kısaca çizelim. JavaDStream<String> fullvisitorids = directKafkaStream.map(line -> line._2().split(",")[0]);
(benim HyperLogLog-Object) küresel durumu korumak için tek yol: Ben Gereken tek alan, fullVisitorId içeren bir akış oluşturmak Oradan JavaPairReceiverInputDStream<String, String> directKafkaStream = KafkaUtils.createStream(streamingContext, ZOOKEEPER_ADDRESS, ZOOKEEPER_GROUP, topics);
: Önce KafkaUtils bir akış oluşturmak Ben udpateStateByKey veya mapWithState yöntemleri buldum. Her ikisi de bir anahtar-değer çifti gerektiriyor ... ama benim kullanımımda bir anahtara ihtiyacım yok. fullvisitorids.mapToPair(value -> new Tuple2<String, String>("key", value));
Ama şimdi sorularım:
Bu yüzden bir "kukla anahtar" kullanmaya karara) Kıvılcım tek tek anahtar bu derenin üzerinde updateStateByKey veya mapWithState ile dönüşümleri parallelize nasıl etkiliyor? Ya da RDD'yi kümelenme üzerinde nasıl bölüyor?
b) Sorunumda, herhangi bir işlevi olmayan bir kukla anahtar eklemekten daha iyi bir çözüm var mı?
Teşekkürler. b) Böyle bir çözümün bir kümeye nasıl dağıtılacağı tam olarak nasıl? – JayKay