我在Spark中有一个RDD,记录如下:
1::F::1::10::48067
2::M::56::16::70072
3::M::25::15::55117
我需要在所有记录中将“ M”转换为1,将“ F”转换为0,这样的结果:
1::0::1::10::48067
2::1::56::16::70072
3::1::25::15::55117
我知道我可以使用以下方法解决此问题:lambda函数,split()命令和int()命令
请提供代码帮助
Rodrigo
答案 0 :(得分:0)
您只需执行以下操作
{
"total_rows": 248133,
"offset": 248129,
"rows": [
{
"id": "01CGBPYVXVD88FPDVR3NP50VJW",
"key": [
"2018-06-19T09:16:47,527",
"ods",
"o_ad_dsp_pvlog_realtime"
],
"value": 1
},
{
"id": "01CGBQ6JMEBR8KBMB8T7Q7CZY3",
"key": [
"2018-06-19T09:16:44,824",
"stage",
"s_ad_ztc_realpv_base_indirect"
],
"value": 1
},
{
"id": "01CGBQ4BKT8S2VDMT2RGH1FQ71",
"key": [
"2018-06-19T09:16:44,707",
"stage",
"s_ad_ztc_realpv_base_indirect"
],
"value": 1
},
{
"id": "01CGBQ18CBHQX3F28649YH66B9",
"key": [
"2018-06-19T09:16:43,717",
"stage",
"s_ad_ztc_realpv_base_indirect"
],
"value": 1
}
]
}
如果"ods"
和rdd.map(lambda x: "::".join(['0' if(y == 'F') else '1' if(y == 'M') else y for y in x.split("::")]))
找到了F
或M
,这将替换行中的每个元素
因此,如果您只想替换第二个元素,则可以执行以下操作
0
我希望答案会有所帮助