2016-04-08 31 views
-2

İki büyük csv dosyasını karşılaştırma ve karşılaştırma sonucunu yeni bir dosyaya yazma görevim var. Dosya 1 200k satır ve dosya 2 de 200K veya daha az olabilir. Her ikisinde de 200 sütun var. Dosyalar sıralanmaz ve herhangi bir sırada olabilir. Ben 4.Yaylı Batch kullanarak iki büyük sıralanmamış CSV dosyası nasıl karşılaştırılır?

, ben ItemReader ve ItemWriter özelleştirilmiş bu kullanarak Bahar Toplu elde edebilirsiniz ya da ben bir kullanmalısınız herhangi bir yolu Projemde Bahar Toplu kullanıyorum

orada Soru Java 8 ve Bahar Sürüm kullanıyorum dosyaları karşılaştırmak için görev ve sonra basit Java kodu? Bunu en hızlı şekilde yapmak istedim. Verilerin hacmi gerçekten büyük olacak 2-4 Gigs olabilir, bu yüzden belleğe yüklemek istemiyorum. Dosya yapıları aşağıdaki gibi bir şeydir.

File1:
regn_nbr, ad, address1, countrycode, regn_date
2345, John 4332 JFK Bulvarı, ABD, 02-12-2011
2347, mark, 4332 Maryland Avenue ABD, 04-27-2015
2348, Smith 4332 JFK yol, ABD, 07-30-2011
2302, Andy 4332 JFK şeritli, ABD, 06-01-2010

File2:
regn_nbr, ad, address1, countrycode, regn_date
2345, John 4332 JFK Bulvarı, ABD, 02-12-2011
2302, Andy 4332 JFK şeritli, ABD,
2911 06-01-2010, Peter, 12 mum sürücü, MX, 01-01-2010
2348, Smith 4332 JFK yol, ABD, 07-30-2011
2347, mark, 4332 Maryland Avenue ABD, 04-27-2015

Önerileriniz, farklı yaklaşımlarınız, stratejileriniz ve uzmanlığınız sizi bekliyor.

+0

Spring Batch kesinlikle bunun için yanlış bir seçim. Bu, toplu işlem için kullanılırken, sorununuz, verileri işlemeden önce en azından ayırmayı gerektirir. – Kayaman

+0

@Kayaman. cevabın için teşekkürler. Evet, bir toplu işlem uygulamasıdır ve FTP, veri tabanları ve çeşitli kaynaklar ve çok sayıda iş işleme üzerinde katları çoğaltma gibi birçok aşamadan geçtik.Verileri farklı kaynaklardan topladık ve bu dosyaları oluşturduk. Şimdi karşılaştırma aşamasındayız. Bu yüzden planım, dosyaları hem eksik kayıt anahtarını dosyalara sıralamak hem de değeri karşılaştırmak için işlemciye iletmektir. Sıralama yapmadan bilmek sadece bu karşılaştırmayı yapabilir mi? – Kenneth

+2

Peki bu şekilde bakın. İlk satırı ilk dosyadan ve ikinci dosyadan ilk satırı alırsınız. İkinci dosyadaki satır, ilk dosyadaki satıra karşılık gelmez. Daha sonra, satırın var olup olmadığını, yoksa silinmişse ve gerçekten yığın işlemede çalışmadığını (yani verimli olamayacağını) görmek için tüm ikinci dosyadan geçmeniz gerekir. Bir çeşit ön işlem yapmadan bunu yapmanın hiçbir yolu yoktur. Hepsini bir veritabanına yapıştırırım. – Kayaman

cevap

1

Bunun için özel bir programa ihtiyacınız olduğuna emin misiniz?

  • koşmak (mysql select data into file örneğin) bellek ise
  • dosyaya neden sonradan senaryoyu karşılaştırmak ve elde

    i

    +0

    Dosyayı saklamak ve işlemek için bellek içi HSQL-DB'yi kullandım. Çok hızlı ve verimli geçti. Teşekkürler Micheal – Kenneth

    0

    En iyi yolun dosyaları okuması ve dosyanızın yapısını gösteren belirli bir java fasulyesinin iki listesini oluşturması olduğunu düşünüyorum. Bu fasülye Karşılaştırılabilir'i uygulayabilir ve listelerinizi sizin tarafınızdan yazılmış belirli kurallarla sipariş edip karşılaştırabilen bir yöntem yazabilirsiniz.

    İlgili konular