spark sql算子数据类型

spark sql算子返回值数据类型介绍

初始变量类型DataFrame

  • 加入persist()固化存储,运行速度更快
val online_profile_score_df: DataFrame = profile_df.join(score_df, usingColumns =Seq("serv_number","statis_month"))
      .persist()   //线上发展用户+app信息

加入select算子后返回DataFrame

    val a: DataFrame = online_profile_score_df.select("cur_product", "prod_id", "prod_name","statis_month","serv_number")

filter算子后返回Dataset[Row]

    val a: Dataset[Row] = online_profile_score_df.select("cur_product", "prod_id", "prod_name","statis_month","serv_number")
      .filter(s"product_type <> '1'")

所以采用toDF()函数来:Dataset[Row]->DataFrame

    val a: DataFrame = online_profile_score_df.select("cur_product", "prod_id", "prod_name","statis_month","serv_number")
      .filter(s"product_type <> '1'")
      .toDF()

存成hive表后,返回Unit

  • 存 成 h i v e 表 为 D a t a F r a m e 的 子 方 法 , 故 统 计 结 果 最 后 务 必 转 成 D a t a F r a m e \color{red}{存成hive表为DataFrame的子方法,故统计结果最后务必转成DataFrame} hiveDataFrameDataFrame
    val a: Unit = online_profile_score_df.select("cur_product", "prod_id", "prod_name","statis_month","serv_number")
      .filter(s"product_type <> '1'")
      .toDF()
      .write.mode(SaveMode.Overwrite).saveAsTable(tableName = s"online_non_2i2c_app_${this_month}_m")

groupBy算子后返回RelationalGroupedDataset

    val a: RelationalGroupedDataset = online_profile_score_df.select("cur_product", "prod_id", "prod_name","statis_month","serv_number")
      .filter(s"product_type <> '1'")
      .groupBy("cur_product", "prod_id","prod_name","statis_month","serv_number")

注 意 : \color{red}{注意:} :

  • 采 用 g r o u p B y 算 子 后 , 后 面 需 要 加 入 聚 合 函 数 。 才 能 转 换 为 D a t a F r a m e 。 \color{red}{采用groupBy算子后,后面需要加入聚合函数。才能转换为DataFrame。} groupByDataFrame

使用agg聚合函数后,正常返回DataFrame

     val a: DataFrame = online_profile_score_df.select("cur_product", "prod_id", "prod_name","statis_month","serv_number")
      .filter(s"product_type <> '1'")
      .groupBy("cur_product", "prod_id","prod_name","statis_month")
        .agg(count("serv_number").alias("p_sum"))

各种聚合算子spark sql完成降序排序,输出排名.

正常返回DataFrame,可存成hive表

     val a: Unit = online_profile_score_df.select("cur_product", "prod_id", "prod_name","statis_month","serv_number")
      .filter(s"product_type <> '1'")
      .groupBy("cur_product", "prod_id","prod_name","statis_month")
        .agg(count("serv_number").alias("p_sum"))
        .sort($"p_sum".desc)
      .withColumn("a_rank", monotonically_increasing_id+1)
        .limit(10)
       .write.mode(SaveMode.Overwrite).saveAsTable(tableName = s"online_non_2i2c_app_${this_month}_m")

输出结果(为保证数据安全,数据为模拟数据)

cur_productprod_idprod_namestatis_monthp_suma_rank
套餐1C54185某app12019039999991
套餐2C32158某app2201903777772
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值