代码之家  ›  专栏  ›  技术社区  ›  Phillip

迭代dict RDD并为数据帧列赋值

  •  0
  • Phillip  · 技术社区  · 6 年前

    所以我有一个数据框 df 就像这样,

    +---+-----+
    | ID|COL_A|
    +---+-----+
    |  1|  123|
    +---+-----+
    

    我也有这样一句话:

    {"COL_B":"abc","COL_C":""}
    

    现在,我要做的是用dict中的key作为新列名,key的值作为列的costant值来更新df。

    预期df应如下所示:

    +---+-----+-----+-----+
    | ID|COL_A|COL_B|COL_C|
    +---+-----+-----+-----+
    |  1|  123|  abc|     |
    +---+-----+-----+-----+
    

    下面是我的python代码,运行良好。。。

    input_data = pd.read_csv(inputFilePath,dtype=str)
    for key, value in mapRow.iteritems():   #mapRow is the dict
            if value is None:
                    input_data[key] = ""
            else:
                    input_data[key] = value
    

    现在,我正在将这段代码迁移到pyspark,并想知道如何在pyspark中实现它 ?

    谢谢你的帮助。

    1 回复  |  直到 6 年前
        1
  •  0
  •   Upasana Mittal    6 年前

    为了组合RDD,我们使用 zip join .以下是使用 拉链 . 拉链 就是把它们粘在一起 map 变平。

    from pyspark.sql import Row
    
    rdd_1 = sc.parallelize([Row(ID=1,COL_A=2)])
    rdd_2 = sc.parallelize([Row(COL_B="abc",COL_C=" ")])
    
    result_rdd = rdd_1.zip(rdd_2).map(lamda x: [j for i in x for j in i])
    

    笔记 我目前没有payspark,所以没有测试。