2015-08-22 43 views
0

格式化我有一些火花像這樣的代碼:刪除列表中的火花

val combPrdGrp = custPrdGrp3.join(cmpgnPrdGrp3) 

val combPrdGrp2 = combPrdGrp.groupByKey 


val combPrdGrp3 = combPrdGrp2.map{case (k3, vals3) => { 
    val valsString3 = vals3.map{case (id3, m3) => { 
    s"$id3 $m3" 
    } 
    } 
    s"$k3 $valsString3" 
}} 

當我做了combPrdGrp3.first我得到下面的結果。

res1: String = 110| List({'CNSMR_DIRCT_SAVG': {PRVCY_CALL: 1, PRVCY_SWP: 1, PRVCY_MAIL: 1, PRVCY_AFIL: 1, PRVCY_FCRA: 1, PRVCY_PIPE: 1, PRVCY_GLBA: 4}}| {'CARDXSL1503L': {contacted: '3/25/2015', channel: 'CARD-XSL', hit_home_date: 'ASPEN - Reminder', campaign: 'XSELL TO 360', creative: 'EM', refcode: 'Y'}}) 

我想List(和結束)被刪除,但似乎無法弄清楚如何做到這一點。我試圖用.pipe但似乎並沒有這樣的工作:

val combPrdGrp4 = combPrdGrp3.pipe("sed s/List((//g").pipe("sed s/)//g") 

會崩潰SC出於某種原因。嘗試處理結果時,我會得到一個sc shutdown錯誤。

combPrdGrp2.first會產生這樣的結果:

res2: (String, Iterable[(String, String)]) = (110|,CompactBuffer(({'CNSMR_DIRCT_SAVG': {PRVCY_CALL: 1, PRVCY_SWP: 1, PRVCY_MAIL: 1, PRVCY_AFIL: 1, PRVCY_FCRA: 1, PRVCY_PIPE: 1, PRVCY_GLBA: 4}}|, {'CARDXSL1503L': {contacted: '3/25/2015', channel: 'CARD-XSL', hit_home_date: 'ASPEN - Reminder', campaign: 'XSELL TO 360', creative: 'EM', refcode: 'Y'}}))) 

回答

2

你可以使用mkString格式化CompactBuffer/List自己:

List(1, 2, 3).toString 
// String = List(1, 2, 3) 

List(1, 2, 3).mkString 
// String = 123 

List(1, 2, 3).mkString(", ") 
// String = 1, 2, 3 

在你combPrdGrp2的情況下,這可能看起來像:

val elem = (
    "110|", 
    Iterable((
    "{'CNSMR_DIRCT_SAVG': {PRVCY_CALL: 1, PRVCY_SWP: 1, PRVCY_MAIL: 1, PRVCY_AFIL: 1, PRVCY_FCRA: 1, PRVCY_PIPE: 1, PRVCY_GLBA: 4}}|", 
    "{'CARDXSL1503L': {contacted: '3/25/2015', channel: 'CARD-XSL', hit_home_date: 'ASPEN - Reminder', campaign: 'XSELL TO 360', creative: 'EM', refcode: 'Y'}}" 
)) 
) 
val combPrdGrp2 = List(elem) 

combPrdGrp2.map { case (n, list) => 
    val formattedPairs = list.map { case (a, b) => s"$a $b" } 
    s"$n ${formattedPairs.mkString}" 
} 
+0

得到':20:error:not found:value n',但我在'combPrdGrp2.map' ....的情況下看到了n ......而不是'val combPrdGrp2 = combPrdGrp.groupByKey' ...它變成'val combPrdGrp2 = List(combPrdGrp)'?當我做combPrdGrp2.first時,我得到這個錯誤:':58:error:value first不是List [org.apache.spark.rdd.RDD [(String,(String,String)]]]的成員' ...以及關鍵的團隊會發生什麼? – user2061886

+0

1)我在我的答案中糾正了錯字,所以它編譯正確。 2)你仍然會使用'val combPrdGrp2 = combPrdGrp.groupByKey'。 'List(elem)'只是創建一個具有類似內容的集合,以顯示'mkString'如何在你的情況下工作。 –