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