2016-03-22 24 views
0

Benzer konular hakkında birkaç soru sordum, ancak sorunumun hiçbir yanıtını uygulayamadım, ayrıca en iyi uygulamaları merak ediyorum.Veri kümesini SQL'den RDD'ye dönüştürme [vektör]

Bir SQL veritabanına ML için bir dateet yükledim. Mllib'in kümeleme işlevini buna göre uygulamak istiyorum. SQL veritabanını, sqlContext kullanarak DataFrame'a yükledim, alakasız sütunları bıraktım. Sonra sorunlu kısım oldu, DataFrame'in her satırı ayrıştırılarak bir vektör yaratıyorum. Vector, toJavaRDD işlevini kullanarak RDD'ye dönüştürülür.

Benim asıl soru ben yaklaşık kıvılcım belgelerinde okumaya ne ilişkin
val usersDF = sqlContext.read.format("jdbc").option("url","jdbc:mysql://localhost/database"). 
    option("driver","com.mysql.jdbc.Driver").option("dbtable","table"). 
    option("user","woot").option("password","woot-password").load() 

val cleanDF = usersDF.drop("id").drop("username") 
cleanDF.show() 

val parsedData = cleanDF.map(s => Vectors.dense(s.toString().replaceAll("[\\[\\]]", "").trim.split(',').map(_.toDouble))).cache() 

val splits = parsedData.randomSplit(Array(0.6,0.4), seed = 11L) 
val train_set = splits(0).cache() 

val gmm = new GaussianMixture().setK(2).run(train_set) 

: Local vector, DataFrame haritalama işçiler üzerinde gerçekleştirilen ve olacak benim anlayış daha sonra olacak İşte

kodu (işleri) 'dir Vektör yaratılırken Sürücüye gönderilen (Yerel vektörün anlamı mıdır) sadece daha sonra işçilere tekrar gönderilecek? Bunu başarmanın daha iyi bir yolu yok mu?

Başka bir şey, SQL'i DataFrame'e yalnızca dizeye dönüştürmek ve tekrar ayrıştırmak için yüklemek biraz garip görünüyor. Başka en iyi uygulama önerileri var mı? link kaynaktan

cevap

0

Eğer yerel bir vektör tam sayı yazılan ve 0 tabanlı endeks ve çift yazılmış değerleri, tek bir makine üzerinde depolanmış olan

önerdi. MLlib iki tür yerel vektörünü destekler: yoğun ve seyrek.

Dağıtılmış bir matris, bir veya daha fazla RDD'de dağıtılmış olarak depolanan uzun yazılan satır ve sütun dizinlerine ve çift yazılan değerlere sahiptir.

yerel vektör

Eğer RDD (String, Integer, Dizi) için kullanacağı herhangi bir nesne gibi hareket ediyorlar, yarattıkları ve tek bir makinede, işçi düğümünde saklanır ve bunları toplamak yalnızca edilir Sürücü düğümüne gönderilecekler. Eğer uzunluk n, x1 ve x2, (x = x1::x2) iki halfs bunu ayırmak istiyorum dağıtılarak saklayarak büyüklüğü 2n bir vektör x düşünün

. Nokta ürününü başka bir y10 ile gerçekleştirmek için, işçiler r1=x1*y1 (makine 1'de) ve r2=x2*y2 (makine 2'de) gerçekleştirecek ve daha sonra r=r1+r2 veren kısmi sonuçları gruplandırmanız gerekecektir. Vektörünüz x dağıtılmıştır, vektörler x1 ve x2 tekrar yerel vektörlerdir. Yerel bir vektör olarak x varsa, tek adımda bir çalışan düğümde r=x*y gerçekleştirebilirsiniz.

İkinci sorunuz için, neden vektörleri SQL biçiminde sakladığınızı göremiyorum. Bunun gibi bir CSV dosyasına sahip olmak yeterli olur:

label feature1 feature2 ... 
1, 0.5,  1.2  ... 
0, 0.2,  0.5  ... 
İlgili konular