Apache Spark:如何统一计数和统计?

时间:2016-12-14 17:14:25

标签: apache-spark

我想同时做一个明确的计数和计数。 让我通过一个简单的例子向您解释。 这是我的输入数据:

arbre;pommier
fruit;pomme
fruit;pomme
fruit;fraise
fruit;ichigo
arbre;cerisier
arbre;abricotier
sport;foot
sport;rugby
arbre;abricotier
arbre;abricotier
arbre;bananier
fruit;ananas
sport;basket
arbre;abricotier
arbre;abricotier

作为输出,我希望得到:

//type;count;distinct-count
arbre;9;3
fruit;5;4
sport;3;3

使用单词计数示例,我可以计算单词出现的时间(所以这里是计数)。使用函数distinct().groupeByKey(),我设法计算非重复计数(这里是distinct-count)。

但是,我无法弄清楚如何在同一个RDD上执行此操作,而不是两个单独的RDD。

如果您有关于此主题的想法,文档或链接,我将非常感谢。

1 个答案:

答案 0 :(得分:3)

数据:

col1,col2
arbre,pommier
fruit,pomme
fruit,pomme
fruit,fraise
fruit,ichigo
arbre,cerisier
arbre,abricotier
sport,foot
sport,rugby
arbre,abricotier
arbre,abricotier
arbre,bananier
fruit,ananas
sport,basket
arbre,abricotier
arbre,abricotier

使用 Spark 2

创建Dataframe
val df = sqlContext.read.option("header", "true").option("inferSchema", "true").csv("filelocation")

df.show

import sqlContext.implicits._

import org.apache.spark.sql.functions._

//Applying count and distinct count
df.groupBy("col1")
  .agg(count("col2").alias("count"), countDistinct("col2").alias("distinct"))
  .show

输出:

+-----+-----+--------+
| col1|count|distinct|
+-----+-----+--------+
|arbre|    8|       4|
|sport|    3|       3|
|fruit|    5|       4|
+-----+-----+--------+