2017-06-21 12 views
2

私はSpark 1.6.1とJavaをプログラミング言語として使用しています。 次のコードは、データフレームで罰金働いていた:sparkデータセットグループbyとsum

simpleProf.groupBy(col("col1"), col("col2")) 
       .agg(
        sum("CURRENT_MONTH"), 
        sum("PREVIOUS_MONTH") 
       ); 

しかし、それは、Javaでのデータセットと同じことを行うにはどのように任意のアイデアをデータセットを/ SPARK使用していないのですか?

乾杯

+0

あなたのコードを投稿できませんか?これはうまくいくはずなので、これをどうしようとしているかによって異なります。 –

+0

私の場合は、それも動作します。例外を貼り付けることはできますか? –

+0

「あなたはデータセットを使用していません」_データセットを使用しても機能しないことをどのように知っていますか?あなたがそう信じる結果は何ですか? –

答えて

-1

これはあなたの場合に有効です。

simpleProf.groupBy(simpleProf.col("col1"), simpleProf.col("col2")) 
      .agg(
       sum(simpleProf.col("CURRENT_MONTH")), 
       sum(simpleProf.col("PREVIOUS_MONTH")) 
    ); 

か、GROUPBY後、私はGroupedDatasetオブジェクトを取得するという意味で、動作しないと私は、関数AGGを適用しようとすると、それはtypedColumnを必要とするSQLクエリ

simpleProf.registerTempTable("prof"); 
sqlContext.sql("SELECT sum(CURRENT_MONTH),sum(PREVIOUS_MONTH) FROM prof group by (CURRENT_MONTH, PREVIOUS_MONTH)) 
1

を実行します列の代わりに。

ああ理由は、型指定された列で動作しますが、リレーショナル列と連携groupByあり、かつgroupByKeyスパーク2.xでデータセットとデータフレームのマージ、のこの上だけでいくつかの混乱がありました。したがって、1.6で明示的なデータセットを使用していることを考えると、.asメソッドを使用して列を具体化するのが解決策です。

sum("CURRENT_MONTH").as[Int]