在Spark Python中转换RDD行的一部分

时间:2018-06-20 01:07:46

标签: python apache-spark split int rdd

我在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

1 个答案:

答案 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("::")])) 找到了FM,这将替换行中的每个元素

因此,如果您只想替换第二个元素,则可以执行以下操作

0

我希望答案会有所帮助