当前位置:  开发笔记 > 数据库 > 正文

如何计算Spark SQL中的总百分比

如何解决《如何计算SparkSQL中的总百分比》经验,为你挑选了1个好方法。

考虑以下数据:

Name | Flag
A    | 0
A    | 1
A    | 0
B    | 0
B    | 1
B    | 1

我想将其转换为:

Name | Total | With Flag | Percentage
A    | 3     | 1         | 33%
B    | 3     | 2         | 66%

最好是在Spark SQL中.



1> zero323..:

例如这样:

val df = sc.parallelize(Seq(
  ("A", 0), ("A", 1), ("A", 0),
  ("B", 0), ("B", 1), ("B", 1)
)).toDF("Name", "Flag")

df.groupBy($"Name").agg(
  count("*").alias("total"),
  sum($"flag").alias("with_flag"),
  // Do you really want to truncate not for example round?
  mean($"flag").multiply(100).cast("integer").alias("percentage"))

// +----+-----+---------+----------+
// |name|total|with_flag|percentage|
// +----+-----+---------+----------+
// |   A|    3|        1|        33|
// |   B|    3|        2|        66|
// +----+-----+---------+----------+

要么:

df.registerTempTable("df")
sqlContext.sql("""
  SELECT name, COUNT(*) total, SUM(flag) with_flag, 
         CAST(AVG(flag) * 100 AS INT) percentage
  FROM df
  GROUP BY name""")

// +----+-----+---------+----------+
// |name|total|with_flag|percentage|
// +----+-----+---------+----------+
// |   A|    3|        1|        33|
// |   B|    3|        2|        66|
// +----+-----+---------+----------+

推荐阅读
郑小蒜9299_941611_G
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有