首页 文章

在不使用UDF的情况下将新列添加到pyspark数据帧?

提问于
浏览
0

我目前有一个pyspark数据帧,其中一列包含我希望使用我编写的函数查找的数字行,以返回一串信息 . 我知道简单的方法是使用withCoulmn并定义一个UDF来从旧的列创建一个新列,但是我的函数使它无法将其注册为UDF的方式 . 我可以创建一个新的数据框与我的新列基于旧列的值而不制作UDF?

1 回答

  • 1

    您可以从dataframe转到rdd然后再转到dataframe . 例如,假设您有一个包含两列的数据框 - 'col1'和'col2':

    df = sqlContext.createDataFrame([[1,2],[3,4],[5,6]],['col1','col2'])
    df.show()
    
    +----+----+
    |col1|col2|
    +----+----+
    |   1|   2|
    |   3|   4|
    |   5|   6|
    +----+----+
    

    您可以转换为rdd,通过 Map 运行它,并返回带有'col1','col2'和新列的元组 - 在本例中为'col3'(gen_col_3将是您的函数):

    def gen_col_3(col1, col2):
        return col1 + col2
    
    rdd = data.rdd.map(lambda x: (x['col1'], x['col2'], gen_col_3(x['col1'],x['col2'])))
    

    然后你可以转换回数据帧,如下所示:

    df = rdd.toDF(['col1','col2','col3'])
    df.show()
    
    +----+----+----+
    |col1|col2|col3|
    +----+----+----+
    |   1|   2|   3|
    |   3|   4|   7|
    |   5|   6|  11|
    +----+----+----+
    

相关问题