如何计算数据框每列中的要素?

时间:2016-07-27 08:48:52

标签: apache-spark pyspark

我有一个包含多列且只有1和0值的数据框。

看起来像这样:

时间A B C D

xxxx 0 0 0 0

xxxx 0 1 0 1

xxxx 0 0 0 1

我想算一下,我一天有多少时间(对应错误)。 我看到如何用一列来做到这一点:

  errors = (df.filter('A=1')
              .select(to_date(df.time).alias('day'),df.A)
              .groupBy('day')
              .count()
               )

这对我来说是一个专栏的好结果,虽然它在一天内没有错误时不给我0(我想得到所有的日子,如果没有错误,则为0)。< / p>

我一直试图将其解析为所有列。 我还想避免(如果可能的话)为每个列做这个,然后加入,因为我有8列。

有任何帮助吗? 谢谢!

1 个答案:

答案 0 :(得分:3)

好的,你走了。考虑到样品质量低,我刚刚简化了日期解析步骤,但想法就在这里。

因此,请考虑以下DataFrame df

+----+---+---+---+---+
|time|  A|  B|  C|  D|
+----+---+---+---+---+
|xxxx|  0|  0|  0|  0|
|xxxx|  0|  1|  0|  1|
|xxxx|  0|  0|  0|  1|
+----+---+---+---+---+

您只需要在每列上使用聚合函数sum,如下所示:

from pyspark.sql import functions as F
df.groupBy('time') \
  .agg(F.sum('A').alias("A"),F.sum('B').alias("B"),F.sum('C').alias("C"),F.sum('D').alias("D")) \
  .show()

# +----+---+---+---+---+
# |time|  A|  B|  C|  D|
# +----+---+---+---+---+
# |xxxx|  0|  1|  0|  2|
# +----+---+---+---+---+