SPARK-SQL - groupBy分组聚合相关的api,pivot实现行转列

pivot实现行转列

准备json文件

{"id":"1", "orderId":"1", "name":"apple", "amount":4, "price":20.0, "userId":"1"}
{"id":"2", "orderId":"2", "name":"book", "amount":5, "price":10.0, "userId":"1"}
{"id":"3", "orderId":"3", "name":"cake", "amount":1, "price":200.0, "userId":"2"}

示例代码

import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.SparkSession;

import java.util.Arrays;

public class test28_4 {
    public static void main(String[] args) {
        SparkSession spark = SparkSession
                .builder()
                .config("spark.driver.host", "localhost")
                .appName("GroupApiTest")
                .master("local")
                .getOrCreate();

        spark.sparkContext().setLogLevel("ERROR");

        Dataset<Row> orderItems = spark.read().json(Utils.BASE_PATH + "/join/order_items.json");
        orderItems.show();
        /*
        +------+---+-----+-------+-----+------+
        |amount| id| name|orderId|price|userId|
        +------+---+-----+-------+-----+------+
        |     4|  1|apple|      1| 20.0|     1|
        |     5|  2| book|      2| 10.0|     1|
        |     1|  3| cake|      3|200.0|     2|
        +------+---+-----+-------+-----+------+
         */

        orderItems.groupBy("userId").pivot("name").sum("price").show();
        /*
        +------+-----+----+-----+
        |userId|apple|book| cake|
        +------+-----+----+-----+
        |     1| 20.0|10.0| null|
        |     2| null|null|200.0|
        +------+-----+----+-----+
         */

        orderItems.groupBy("userId").pivot("name", Arrays.asList("apple", "cake")).sum("price").show();
        /*
        +------+-----+-----+
        |userId|apple| cake|
        +------+-----+-----+
        |     1| 20.0| null|
        |     2| null|200.0|
        +------+-----+-----+
         */
    }
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值