2016-12-12 7 views
2

私は次のような構造は、データセット

+--------------------+--------------------+--------------------+-----+ | content | entities | id|topic| +--------------------+--------------------+--------------------+-----+

エンティティとDataSetを持っているとスパーク(Java)の中の文字列の数を集計するためにどのように文字列のリスト、名前付きエンティティである、そして話題は、整数です。

私はトピックで、各個別のエンティティの外観を総括したいです。

私の最初のステップは、「

table.groupBy("topic");

がそれから私が凝集したいが、私はそれを行うことができますどのように、私はカスタムアグリゲーターを実装については取り払わが、その後、私はドンMap<String,Integer>ためのエンコーダを必要としていますどのように作成するか知っている。

この集計を行うにはどうすればよいですか?

+0

が作成されます。すなわち、ID = 1、エンティティは、B、Cを=のでエンティティは、リストです。 id = 2、エンティティ:b、e、f、r? –

+0

はい、正確には – amaik

答えて

1

私はあなたが正確を計算したいのかわからないんだけど、私は見ることができます両方のオプションは、同じ機能が使用されるように必要です。

[OK]を、テストデータ:

import org.apache.spark.sql.types._ 
import org.apache.spark.sql._ 
import sqlContext.implicits._ 

val list = Seq((1, "topic1", Array("a", "b", "c", "b")), (2, "topic1", Array("b", "c", "r")), (3, "topic2", Array("e", "b", "c", "e")), (4, "topic2", Array("b", "c", "e", "r"))) 
val df = sc.parallelize(list).toDF("id", "topic", "entities"); 

は、各トピックに、各タイプのものであるか多くの企業の計算:

df 
    .withColumn("entity", explode('entities)) 
    .groupBy('topic, 'entity) 
    .count() 
    .show(); 

結果は次のようになります。

+------+------+-----+ 
| topic|entity|count| 
+------+------+-----+ 
|topic1|  a| 1| 
|topic1|  b| 3| 
|topic1|  c| 2| 
|topic1|  r| 1| 
|topic2|  b| 2| 
|topic2|  c| 2| 
|topic2|  e| 3| 
|topic2|  r| 1| 
+------+------+-----+ 

どのように多くの異なるエンティティ各トピックがある:

df 
    .withColumn("entity", explode('entities)) 
    .groupBy('topic) 
    .agg(countDistinct('entity)) 
    .show(); 

結果は次のようになります。あなたは、各エンティティの列の多くの行を作成する機能を爆発使うべき答え

+------+-------------+ 
| topic|count(entity)| 
+------+-------------+ 
|topic1|   4| 
|topic2|   4| 
+------+-------------+ 

キー。エンティティは、Bは= Cは確かに3行

0

あなただけのトピックごとにエンティティの合計数をカウントしている場合は、あなたが代わりにカスタムアグリゲーターを記述することのカウント機能を使用することができます。スパークチュートリアルからまっすぐ来る:http://spark.apache.org/docs/latest/sql-programming-guide.html

table.groupBy("topic").count().show(); 
+0

いいえ、トピックの各エンティティの数を合計します。質問を少し明確にした – amaik

関連する問題