首页 > 解决方案 > Pyspark - 当列包含特定字符串时如何对列求和

问题描述

很新pyspark

我正在尝试sum包含特定字符串的列,在这种情况下,字符串是“香烟量”。假设我的数据框被称为df_company

selected = [s for s in df_company.columns if 'Cigarette volume' in s]
selected

Out[66]: ['Cigarette volume south asia',
 'Cigarette volume latin america & caribbean',
 'Cigarette volume middle east & north africa',
 'Cigarette volume east asia & pacific',
 'Cigarette volume north america',
 'Cigarette volume sub saharan africa',
 'Cigarette volume europe & central asia',
 'Cigarette volume total']

低效的方法是手动添加它们,即:

new = df_company.withColumn("Total cicarette volume", col("Cigarette volume europe & central asia")+col("Cigarette volume sub saharan africa")+col("Cigarette volume north america")+col("Cigarette volume east asia & pacific")+col("Cigarette volume middle east & north africa")+col("Cigarette volume latin america & caribbean")+col("Cigarette volume south asia"))

但我正在寻找更通用的东西,比如获取列表中的列,并对它们求和:

selected = [s for s in df_company.columns if 'Cigarette volume' in s]

new = df_company.withColumn('Cigarette volume total', sum(df_company[col] for col in selected))
new = df_company.withColumn('Cigarette volume total', sum(df_company.select(selected))

然而,这两种尝试都失败了。谁能阐明如何对包含特定字符串的列求和?提前致谢。

标签: apache-sparkpysparkapache-spark-sql

解决方案


new = df_company.withColumn('Cigarette volume total', sum(df_company[col] for col in selected))

sum应该可以工作,但是您已经使用 Spark SQL 等效项覆盖了 Python 内置函数。您可以del sum取回内置sum函数。

作为一般的良好做法,from pyspark.sql.functions import *应避免使用。您可以使用类似的东西import pyspark.sql.functions as F来防止覆盖具有相同名称的 Python 内置函数(例如sum, max, min,abs等)


推荐阅读