python - 如何将多列添加到 pyspark aws emr 中的现有数据帧?

标签 python dataframe pyspark apache-spark-sql amazon-emr

我有这样的数据框

Row(id='123456', name='计算机科学', class='科学')

我的数据框中有大约 1000 行。

现在我有这样的功能

def parse_id(id):
    id = somestuff
    return new_id

对于每一列,我都有解析函数,例如 parse_nameparse_class

我想将这些函数应用于每个数据帧行,以便它提供新列,例如 new_id、'new_name'、'new_class'

因此生成的数据框将类似于

Row(id='123456', name='计算机科学', class='科学', new_id='12345668688', new_name='计算机科学新', new_class='科学新')

我该怎么做

最佳答案

我建议您了解一下 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"))

关于python - 如何将多列添加到 pyspark aws emr 中的现有数据帧?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57442330/

相关文章:

apache-spark - Spark : Removing rows which occur less than N times

python - 在 PySpark 中缓存用户和产品潜在特征以缩短预测时间

python - 在numpy数组中查找非零之前的零数

java - 如何在数据框中动态地从列表中选择列加上固定列

python - 将 PySpark Dataframe 过滤器的结果收集到变量中

r - Mutate_all 除了某些列

r - 如何使用来自另一个数据帧的数据创建数据帧?

python - csv 将所有行写入一列 python

python - 从同一模块内的另一个文件导入并从模块外部的 main.py 运行会引发导入错误

python - 速度测试导致奇怪的行为。在一个实例中花费的时间乘以 100,在另一个实例中只乘以 10