2016-12-14 21 views
-1

我想在同一時間做一個不同的計數和計數。 讓我通過一個簡單的例子來解釋你。 這裏是我的輸入數據: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。

如果您有關於此主題的想法,文檔或鏈接,我將非常感激。

回答

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 

使用星火2

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| 
+-----+-----+--------+ 
+0

這是我期待的。你知道我在Java中怎麼做? –

+0

另外,看來結果不是我想要的rdd。我對嗎 ? –

+1

結果是一個數據幀,可以使用.rdd()函數將其轉換爲rdd –

相關問題