2011-01-05 42 views
5

sığdırmak için ben bir korumak için gereken herhangi bir ekstra depolama içermeyen ham bellek alanı yaklaşık 5,5/6 gigabayt etrafında 40/50 bayt 120 milyon kayıtların bir listesini her biri bellekte dizi.çok büyük veri kümesi benzersiz bir listesi oluşturma bellekte

Bu liste benzersiz olduğundan emin olmak istiyoruz. Bunu yapmaya çalıştığım şekilde bir Hashset <dize> oluşturmak ve tüm girdileri tek tek eklemek. Ben yaklaşık 33 milyon kayıtlarına olsun

Ben bellek tükendi ve liste oluşturma gezinme için yavaşlatır.

zamanında girişlerinin bu kitlesel listesini sıralamak için daha iyi bir yolu var mı? Düşünebildiğim tek çözüm bir saat boyunca Amazon EC2 Yüksek Bellek Dörtlü Ekstra Büyük Örnek kullanıyor. Sadece Benzersizliğine kontrol çalışıyorsanız

Teşekkür

+0

Bu veri kümesi nerede depolanıyor? –

cevap

6

, ben sadece kova içine girdi dizisini bölmek ve sonra ayrı ayrı her kova kontrol ederim. Örneğin, verileri bir dosyadan yüklediğiniz varsayılırsa, girdiyi akışa aktarabilir ve kayıtla başlayacak her harf için bir tane olmak üzere 26 farklı dosyaya yazabilirsiniz (Her kayıtta naif bir şekilde varsayım yapıyorum.). AZ ile başlar - lütfen gerçek durumunuz için ayarlayın). Daha sonra, bu küçük dosyaların her birini, var olan kodunuz gibi bir şeyi kullanarak benzersiz olup olmadığını kontrol edebilirsiniz - çünkü bunların hiçbiri bir kerede belleğe sığmayacak kadar büyük olmayacaktır. İlk kepçeleme, farklı kepçelerde bulunan çift girişlerin olmayacağını garanti eder. Tabii

, sen Gruplamayı gerçekleştirebilir ve farklı yaklaşımlar farklı veri setleri için geçerli olacaktır çeşitli yolları vardır. Örneğin, karma koduyla kova koyabilirsiniz, örneğin 32 farklı kova oluşturmak için karma kodun 5 bitini alın. Bu, büyük olasılıkla numaralı eşdeğeri arasındaki kayıtların eşit dağılımını elde etmek ve giriş verileriyle ilgili herhangi bir varsayımda bulunmaz. Ben sadece kavramını kavramanın daha basit bir yolu olduğu gibi yukarıdaki "ilk harf yaklaşımı al" dan bahsetmiştim :)

+0

Aynı şekilde düşünüyoruz. ;) – Amber

+0

Teşekkürler Jon ve Amber, akla gelmeyen harika bir çözüm. – gary

4

Listeyi sıralamak için, kovaların bazılarını düzenli olarak diske atmak için listeyi sıralamak için bucket sort kullanın. hafızanın Ardından, her bir temizlenen kepçeyi sırayla yükleyin ve ya HashSet yaklaşımınızı kullanın ya da sıralayın ve bu şekilde kontrol edin.

-1

Hep o veri kümesi üzerinde daha fazla işlem için yardımcı olabilir benzersiz bir dizin bir sqlite veritabanında işe yarayabilir.

İlgili konular