Scala 带条件/模式匹配的火花贴图
我从csv读取了rddScala 带条件/模式匹配的火花贴图,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
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
操作(提示)的例子。