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"))