【问题标题】:Spark map with conditions / patternmatching具有条件/模式匹配的火花图
【发布时间】:2017-03-09 04:36:01
【问题描述】:

我有一个阅读 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

我该如何进行这样的转变

【问题讨论】:

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

标签: scala dictionary apache-spark rdd


【解决方案1】:

您只需制作一个 UDF 并在该列上应用即可: 所以你的 UDF 应该是这样的:

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

然后把这个函数做成一个udf

val valueUdf= udf(getValue _)

现在应用这个 UDF 来获得新的 Value 输出

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

这会得到你想要的结果!

P.S:代码未经测试,但它必须工作!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多