2016-03-30 9 views
-4

Tablodaki Product_IDs değişiklikleri olarak Sayılar dizisi sütununu (Seq_No) oluşturmak istiyorum. Giriş tablosumda sadece Product_ID'ler var ve Seq_No ile çıktı istiyorum. Scala desteklemediği için SQL'de bölüm üzerinden GropuBy veya Row Number kullanamazsınız. Geçerli PRODUCT_ID önceki Product_Ids eşit değildir olarakSpark Scala'da grupby kullanmadan sekans kimlikleri oluşturmanız gerekiyor

Logic : Seq_No = 1 
      for(i = 2:No_of_Rows) 
      when Product_IDs(i) != Product_IDs(i-1) then Seq_No(i) = Seq_No(i-1)+1 
      Else Seq_No(i) = Seq_No(i-1) 
      end as Seq_No 

Product_IDs Seq_No 
ID1   1 
ID1   1 
ID1   1 
ID2   2 
ID3   3 
ID3   3 
ID3   3 
ID3   3 
ID1   4 
ID1   4 
ID4   5 
ID5   6 
ID3   7 
ID6   8 
ID6   8 
ID5   9 
ID5   9 
ID4   10 

Yani Seq_No oluşturmak istiyorum. Giriş tablonun Product_ID'leri yalnızca bir sütunu var ve Spark Scala'yı kullanarak Seq_No ile Product_ID'leri istiyoruz.

+0

gibi bir şey istiyorum düşünün. – Nikhil

+0

Lütfen sorunuzunuzu düzeltin ve daha açık olun –

cevap

0

ben muhtemelen sadece sıra numaraları oluşturmak için bir işlevi yazardı:

scala> val getSeqNum: String => Int = { 
    var prevId = "" 
    var n = 0 
    (id: String) => { 
    if (id != prevId) { 
     n += 1 
     prevId = id 
    } 
    n 
    } 
} 
getSeqNum: String => Int = <function1> 

scala> for { id <- Seq("foo", "foo", "bar") } yield getSeqNum(id) 
res8: Seq[Int] = List(1, 1, 2) 

GÜNCELLEME: Bunu, Nikhil ötesinde istediğinize oldukça açık değilim ve ben bir değilim

kıvılcım uzmanı, ama Alberto Bonsanto @, ben bir satırdan diğerine Product_IDs değiştikçe 1 ile Seq_No artırmak istiyorum

val rrd = ??? // Hopefully you know how to get the RRD 
for { 
    (id, col2, col3) <- rrd // assuming the entries are tuples 
    seqNum = getSeqNum(id) 
} yield ??? // Hopefully you know how to transform the entries 
+0

Hızlı yanıt için teşekkürler. Lütfen döngü için veri çerçevesinden nasıl sütun geçirileceğine yardımcı olabilir misiniz? Bu örnekte, Product_ID'lerini for döngüsüne nasıl geçirebilirim? – Nikhil

+0

@Tzach Zohar Bu orijinal soruları çözmemde bana yardımcı olabilir misiniz? – Nikhil

+0

Nikhil, Tzach Zohar'ın kim olduğunu bilmiyorum, ancak kimlikleri nasıl atayacağınıza dair asıl soruya cevap verdim mi? – AmigoNico