【问题标题】:What's the fastest way to remove pyspark columns that are all the same value (e.g. 0)?删除所有相同值(例如 0)的 pyspark 列的最快方法是什么?
【发布时间】:2017-09-30 10:00:52
【问题描述】:

我有一个庞大的 pyspark 数据框,我需要从数据框中删除所有为 0 的列。我目前正在使用以下代码:

columns = list(masterdata_raw.schema.names)
zero_col = []
for col_ in columns:
    col_max = masterdata_raw.agg({col_: "max"}).collect()[0]
    col_min = masterdata_raw.agg({col_: "min"}).collect()[0]
    if col_max == 0 and col_min == 0:
        zero_col = zero_col.append(col_)

#*********removing the features found above************
for col_ in zero_col:
    masterdata_raw = masterdata_raw.drop(col_)

不幸的是,这运行了两次聚合,.collect 的结果也是两次......慢

我已经尝试合并聚合,但是因为我试图在一个字典中聚合相同的列名,所以我只得到了一个结果。我想我可以添加另一个名称不同的列,然后同时聚合两者,但这似乎也效率低下。

在 pyspark 中过滤掉所有这些 0 列的最快方法是什么?

【问题讨论】:

  • describe 呢?

标签: python performance filter pyspark


【解决方案1】:

为什么不直接

for col_ in columns:
     if masterdata_raw.groupBy().sum(col_).collect() == 0
        masterdata_raw.drop(col_)

【讨论】:

  • 这不一定有效。 (例如,一列 50 个负数和 50 个负数)
猜你喜欢
  • 1970-01-01
  • 2019-12-06
  • 2010-11-23
  • 2016-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-12
相关资源
最近更新 更多