2017-06-21 56 views
2

我使用Spark 1.6.1和Java作为编程语言。 下面的代码是工作的罚款与dataframesspark数据集组和由总和

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

但是,它不使用数据集,任何想法如何做同样在Java数据集/火花?

干杯

+0

你可以发布你的代码不工作吗?这应该工作,所以这取决于你如何试图做到这一点。 –

+0

在我的情况下,它也可以。你可以粘贴你的例外? –

+0

您能否详细说明_“它不使用数据集”_?你怎么知道它不能使用数据集?什么是导致你相信的输出? –

回答

-1

这应该工作你的情况。

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

或运行SQL查询

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

它不工作,在这个意义上,GROUPBY后,我收到了GroupedDataset对象,当我尝试应用功能AGG它需要typedColumn而不是列。

啊,还有是因为数据集和数据帧的星火2.X合并,那里是一个groupBy与关系列作品,并groupByKey与类型化的列作品只是在这个有些混乱。因此,鉴于您在1.6中使用了明确的数据集,那么解决方案是通过.as方法来表示您的列。

sum("CURRENT_MONTH").as[Int]