如何在 pyspark aws emr 中向现有数据框添加多列?

Posted

技术标签:

【中文标题】如何在 pyspark aws emr 中向现有数据框添加多列?【英文标题】:How can i add multiple columns to existing dataframe in pyspark aws emr? 【发布时间】:2019-08-10 12:53:20 【问题描述】:

我有这样的数据框

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

我该怎么做

【问题讨论】:

【参考方案1】:

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

【讨论】:

以上是关于如何在 pyspark aws emr 中向现有数据框添加多列?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 AWS EMR 中一起添加 2 个(pyspark、scala)步骤?

如何在 jupyter 中显示完整输出不仅是最后一个结果 - 对于 aws emr pyspark

寻找有关如何使用 python 启动 AWS EMR 集群以运行 pyspark 步骤的示例

在 AWS EMR 上使用 pyspark

在 AWS EMR 上的 PySpark 脚本上找不到 com.amazon.ws.emr.hadoop.fs.EmrFileSystem

在 AWS EMR 上的 zip 文件中提交 pyspark 支持 sql 文件