我有这样的数据框
Row(id='123456', name='计算机科学', class='科学')
我的数据框中有大约 1000 行。
现在我有这样的功能
def parse_id(id):
id = somestuff
return new_id
对于每一列,我都有解析函数,例如 parse_name
、 parse_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/