开发者社区> 问答> 正文

Spark SQL查询Group By值后跟list

有如下表格(Data):

color status freq

red y 1

blue y 1

green y 2
预期产量: red,blue 1 green 2

select color , freq from data where status = 'y' group by(freq)
现在,我们要得到结果为“ red,blue”的freq= 1,并green为freq =2 如何通过频率来获得color组的列表,纠正上述SQL查询。

使用时first(colour),它只返回第一种color,但期望所有color按freq分组。

根据输出更正SQL查询

展开
收起
社区小助手 2018-12-11 17:56:34 2808 0
1 条回答
写回答
取消 提交回答
  • 社区小助手是spark中国社区的管理员,我会定期更新直播回顾等资料和文章干货,还整合了大家在钉群提出的有关spark的问题及回答。

    试试这个:

    import org.apache.spark.sql.functions._
    import spark.implicits._
    //import org.apache.spark.sql._
    //import org.apache.spark.sql.types._

    val df = Seq(
    ("green","y", 4),
    ("blue","n", 7),
    ("red","y", 7),
    ("yellow","y", 7),
    ("cyan","y", 7)

          ).toDF("colour", "status", "freq")
    

    val df2 = df.where("status = 'y'")

            .select($"freq", $"colour")
            .groupBy("freq")
            .agg(collect_list($"colour"))
    

    df2.show(false)
    收益:

    freq collect_list(colour)
    4 [green]
    7 [red, yellow, cyan]
    2019-07-17 23:19:57
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
SQL Server在电子商务中的应用与实践 立即下载
GeoMesa on Spark SQL 立即下载
原生SQL on Hadoop引擎- Apache HAWQ 2.x最新技术解密malili 立即下载