apache-spark - 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))
然而,这两种尝试都失败了。谁能阐明如何对包含特定字符串的列求和?提前致谢。
解决方案
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
等)
推荐阅读
- jhipster - Azure 资源管理器模板 - 将 jhipster .war 文件和 web.config 部署到 webapp
- javascript - 从rails下拉列表中提取对象并将值传递给javascript
- opencv - What does this subtract_gaussian_blur function that uses the GaussianBlur function in OpenCV do?
- c# - Why is NSBundle.MainBundle.GetUrlForResource returning null
- string - applying a function rowwise inside mutate(dplyr)
- python - 使用python连接位于不同网络上的两台计算机
- perl - Script does not die if there are incorrect arguments
- java - 是否可以在我的 PC 上设置外部目录(作为库)的路径?安卓
- jquery - 如何使用 jquery 在 Nodejs 中验证 JSON 文件上传
- laravel - laravel 5.8中不同用户的注销功能?