Python 如何向pyspark aws emr中的现有数据帧添加多列?

Python 如何向pyspark aws emr中的现有数据帧添加多列?,python,dataframe,pyspark,apache-spark-sql,amazon-emr,Python,Dataframe,Pyspark,Apache Spark Sql,Amazon Emr,我有这样的数据帧 行(id='123456',name='Computer Science',class='Science') 我在dataframe中有大约1000行 现在我有一个函数 def parse_id(id): id = somestuff return new_id 对于每个列,我都有解析函数,比如parse\u name,parse\u class 我希望将这些函数应用于每个数据帧行,以便它提供新列,如new\u id,“new\u name”,“new\u c

我有这样的数据帧

行(id='123456',name='Computer Science',class='Science')

我在dataframe中有大约1000行

现在我有一个函数

def parse_id(id):
    id = somestuff
    return new_id
对于每个列,我都有解析函数,比如
parse\u name
parse\u class

我希望将这些函数应用于每个数据帧行,以便它提供新列,如
new\u id
,“new\u name”,“new\u class”

因此,生成的数据帧如下所示

行(id='123456',name='Computer Science',class='Science',new'u id='1234566888',new'u name='Computer Science new',new'u class='Science new')


我怎样才能做到这一点呢

我建议您仔细阅读Spark,f.e.中的UDF概念。这篇博客文章对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"))