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

时间:2017-07-31 23:35:40

标签: apache-spark pyspark spark-dataframe

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

1 个答案:

答案 0 :(得分: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,通过地图运行它,并返回一个带有'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|
+----+----+----+