具有条件/模式匹配的火花地图

时间:2016-10-26 17:26:42

标签: 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 val7 val24

对于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

如何进行此类转换

1 个答案:

答案 0 :(得分:1)

您可以直接制作UDF并应用该列: 所以你的UDF应该是这样的:

def getValue(s:String)=s match{
case "val13"=>"A"
case "val17"=>"B"
case _=>s
}

然后从这个函数中创建一个udf

val valueUdf= udf(getValue _)

现在应用此UDF以获取新的值输出

sampleRDD.withColumns("col3",valueUdf(sampleRDD("col3")))

这会给你想要的结果!

P.S:代码未经过测试但必须有效!