Scala 带条件/模式匹配的火花贴图

Scala 带条件/模式匹配的火花贴图,scala,dictionary,apache-spark,rdd,Scala,Dictionary,Apache Spark,Rdd,我从csv读取了rdd val sampleRDD = sc.textFile(path) csv如下所示: col1 col2 col3 col4 -------------------- val1 val2 val3 val4 val5 val6 val7 val8 val9 val10 val3 val12 val13 val14 val15 val16 val17 val18 val3 val20 val21 val22

我从csv读取了rdd

val sampleRDD = sc.textFile(path)
csv如下所示:

    col1 col2 col3 col4
    --------------------
    val1 val2 val3 val4
    val5 val6 val7 val8
    val9 val10 val3 val12
    val13 val14 val15 val16
    val17 val18 val3 val20
    val21 val22 val7 val24
def getValue(s:String)=s match{
case "val13"=>"A"
case "val17"=>"B"
case _=>s
}
对于col3,我有多个重复的值。我有一张地图。对于
val3
我希望输出值为
A
,对于
val7
我希望输出值为
B
。我希望输出与下面的一样

不幸的是,我们仍然必须使用spark 1.0.0,并且需要使用RDD

    col1 col2 col3 col4
    --------------------
    val1 val2 A val4
    val5 val6 B val8
    val9 val10 A val12
    val13 val14 val15 val16
    val17 val18 A val20
    val21 val22 B val24

如何进行这种转换

您只需制作一个自定义项并应用于该列即可: 因此,您的UDF应该如下所示:

    col1 col2 col3 col4
    --------------------
    val1 val2 val3 val4
    val5 val6 val7 val8
    val9 val10 val3 val12
    val13 val14 val15 val16
    val17 val18 val3 val20
    val21 val22 val7 val24
def getValue(s:String)=s match{
case "val13"=>"A"
case "val17"=>"B"
case _=>s
}
然后用这个函数做一个自定义项

val valueUdf= udf(getValue _)
现在应用这个UDF来获得新的值输出

sampleRDD.withColumns("col3",valueUdf(sampleRDD("col3")))
这会给你想要的结果


附言:代码没有经过测试,但它必须工作

你已经试过什么了?网上有很多这样的
map
操作(提示)的例子。