我有阅读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
如何进行此类转换
答案 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:代码未经过测试但必须有效!