首页 > 解决方案 > 如何在 pyspark aws emr 中向现有数据框添加多列?

问题描述

我有这样的数据框

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

我在数据框中有 1000 行。

现在我有类似的功能

def parse_id(id):
    id = somestuff
    return new_id

对于每一列我都有类似的解析函数parse_nameparse_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')

我怎样才能做到这一点

标签: pythondataframepysparkapache-spark-sqlamazon-emr

解决方案


我建议您阅读 Spark 中的 UDF 概念,因为这篇博文https://changhsinlee.com/pyspark-udf/也通过足够的示例很好地描述了这个概念。

对于您的问题,假设您的输入数据框在 variable 中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"))

推荐阅读