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
在您的案例中的工作方式。