Scala 删除spark中的列表格式

Scala 删除spark中的列表格式,scala,apache-spark,Scala,Apache Spark,我有一些类似这样的火花代码: 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" } }

我有一些类似这样的火花代码:

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"
 }}
val combPrdGrp4 = combPrdGrp3.pipe("sed s/List((//g").pipe("sed s/)//g")
当我做一个
combPrdGrp3。首先
我得到以下结果

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'}})
我想删除
列表(
及其结尾
,但似乎不知道该怎么做。我试着使用
.pipe
,但似乎不是这样:

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"
 }}
val combPrdGrp4 = combPrdGrp3.pipe("sed s/List((//g").pipe("sed s/)//g")
由于某种原因,这将使sc崩溃。在尝试处理结果时,我会得到一个
sc shutdown
错误

执行
combPrdGrp2。首先
生成以下结果:

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'}})))

您可以使用
mkString
自己格式化
CompactBuffer
/
列表

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}"
}
获取一个
:20:error:notfound:value n
但是我在
combPrdGrp2.map
的case部分看到了n…另外,不是执行
val combPrdGrp2=combPrdGrp.groupByKey
…而是变成
val combPrdGrp2=List(combPrdGrp)
?当我执行combPrdGrp2.first时,我得到了以下错误:
:58:error:value first不是列表[org.apache.spark.rdd.rdd[(String,(String,String))]
…按键分组也会发生什么情况?1)我已经更正了答案中的输入错误,因此它可以正确编译。2) 您仍然可以使用
val combPrdGrp2=combPrdGrp.groupByKey
List(elem)
只是创建一个具有类似内容的集合,以显示
mkString
在您的案例中的工作方式。