2017-03-09 66 views
0

您好我有以下格式RDD unflatten RDD(所有值都是字符串)如何基於幾列

rdd1 = [(g1, p1, t1, e1, i1, v1), 
     (g1, p1, t1, e2, i2, v2), 
     (g1, p1, t1, e3, i3, v3), 
     (g1, p1, t1, e4, i4, v4), 
     (g2, p2, t2, e3, i3, v3), 
     (g2, p2, t2, e4, i4, v4)...] 

我想去改造它,並得到如下格式

rdd2 = [(g1, p1, t1, "e1.i1.v1|e2.i2.v2|e3.i3.v3|e4.i4.v4"), 
     (g2, p2, t2, "e3.i3.v3|e4.i4.v4")...] 

因此基於關於g,p和t值,我想解開RDD,我想在同一行中分隔eiv值管道。您可以將g,p和t作爲結果元組的關鍵字。

回答

1

它應該是相當簡單的,像這樣:

rdd1 
.map { case (g, p, t, e, i, v) => ((g, p, t), s"$e.$i.$v")} 
.reduceByKey { _ + "|" + _ } 
.map {case ((g, p, t), v) => (g, p, t, v)}