我有这样的数据框Row(id='123456', name='Computer Science', class='Science')
我在数据框中有1000行
现在我有像
def parse_id(id):
id = somestuff
return new_id
对于每一列,我都有解析功能,例如
parse_name
,parse_class
我想将这些函数应用于每个数据框行,以便提供新列,如
new_id
,“ new_name”,“ new_class”所以结果数据框将像
Row(id='123456', name='Computer Science', class='Science', new_id='12345668688', new_name='Computer Science new', new_class='Science new')
我怎样才能做到这一点
最佳答案
我建议您仔细阅读Spark中UDF的概念,例如这篇博客文章https://changhsinlee.com/pyspark-udf/的概念也描述得很好,并带有足够的示例。
对于您的问题,让我们假设您的输入数据帧位于变量df
中,那么此代码应该可以解决您的问题:
import pyspark.sql.functions as f
import pyspark.sql.types as t
parse_id_udf = f.udf(parse_id, t.StringType())
parse_name_udf = f.udf(parse_name, t.StringType())
parse_class_udf = f.udf(parse_class, t.StringType())
result_df = df.select(f.col("id"), f.col("name"), f.col("class"),
parse_id_udf(f.col("id")).alias("new_id"),
parse_name_udf(f.col("name")).alias("new_name"),
parse_class_udf(f.col("class")).alias("new_class"))