统计型标签:支付方式

絮叨两句:
博主是一名数据分析实习生,利用博客记录自己所学的知识,也希望能帮助到正在学习的同学们
人的一生中会遇到各种各样的困难和折磨,逃避是解决不了问题的,唯有以乐观的精神去迎接生活的挑战
少年易老学难成,一寸光阴不可轻。
最喜欢的一句话:今日事,今日毕

                                                              支付方式标签开发

Pay

  • 添加标签
  • 标签开发
  • 小结

添加标签

统计型标签:支付方式_第1张图片
统计型标签:支付方式_第2张图片
在这里插入图片描述

inType=HBase##zkHosts=192.168.10.20##zkPort=2181##hbaseTable=tbl_orders##family=detail##selectFields=memberId,paymentCode

标签开发

package cn.itcast.userprofile.up24.statistics

import cn.itcast.userprofile.up24.public.PublicStaticCode
import org.apache.spark.sql.expressions.Window
import org.apache.spark.sql.{
     DataFrame, SparkSession}

object PaymentCode extends PublicStaticCode{
     
  override def SetAppName: String = "paymentCode"

  override def Four_Name: String = "支付方式"

  override def compilerAdapterFactory(spark: SparkSession, five: DataFrame, tblUser: DataFrame): DataFrame = {
     
    five.show()

    /**
     * +------+--------+
     * |tagsId|    rule|
     * +------+--------+
     * |    30|  alipay|
     * |    31|   wxpay|
     * |    32|chinapay|
     * |    33|  kjtpay|
     * |    34|     cod|
     * |    35|   other|
     * +------+--------+
     */
    tblUser.show()

    /**
     * +---------+-----------+
     * | memberId|paymentCode|
     * +---------+-----------+
     * | 13823431|     alipay|
     * |  4035167|     alipay|
     * |  4035291|     alipay|
     * |  4035041|     alipay|
     * | 13823285|     kjtpay|
     */
    /**
     * 思路:
     * 一个用户可能有多个支付方式,找到每个用户用的最多的次数,就是用户最常用的支付方式
     *
     */
    import org.apache.spark.sql.functions._
    import spark.implicits._
    var payCount= count("paymentCode").as("payCount")

    val paymentCount = tblUser.groupBy("memberId", "paymentCode").agg(payCount)

    /**
     * +---------+---------------+--------+
     * | memberId|    paymentCode|payCount|
     * +---------+---------------+--------+
     * | 13823481|         alipay|      96|
     * | 13823481|            cod|      14|
     * |  4035251|            cod|      18|
     * |  4035251|       chinapay|       4|
     * |  4035251|       giftCard|       2|
     */
//    paymentCount.withColumn("number",row_number().over(window = Window.partitionBy("memberId").orderBy("payCount"))).show()

      /**
       * 可以看出, payCount次数多的在最下面,如何将此处倒序排列呢
       * +---------+-----------+--------+------+
       * | memberId|paymentCode|payCount|number|
       * +---------+-----------+--------+------+
       * | 13822725|    prepaid|       1|     1|
       * | 13822725|   giftCard|       2|     2|
       * | 13822725|      wspay|       3|     3|
       * | 13822725|     kjtpay|       9|     4|
       * | 13822725|        cod|      12|     5|
       * | 13822725|     alipay|      89|     6|
       * | 13823083|   giftCard|       1|     1|
       * | 13823083|      wspay|       7|     2|
       * | 13823083|     kjtpay|      12|     3|
       * | 13823083|        cod|      18|     4|
       * | 13823083|     alipay|      94|     5|
       * |138230919|   chinapay|       1|     1|
       * |138230919| chinaecpay|       1|     2|
       * |138230919|      wspay|       3|     3|
       * |138230919|     kjtpay|       7|     4|
       * |138230919|        cod|      15|     5|
       * |138230919|     alipay|      98|     6|
       * | 13823681|   chinapay|       2|     1|
       * | 13823681|      wspay|       3|     2|
       * | 13823681|     kjtpay|       5|     3|
       * +---------+-----------+--------+------+
       */
    /**
     * 使用窗口函数,对支付方式进行分区,在排序,取出number为1的数据
     */
    val result = paymentCount.withColumn("number", row_number().over(window = Window.partitionBy("memberId").orderBy('payCount.desc))).where("number=1")

    /**
     * +---------+-----------+--------+------+
     * | memberId|paymentCode|payCount|number|
     * +---------+-----------+--------+------+
     * | 13822725|     alipay|      89|     1|
     * | 13822725|        cod|      12|     2|
     * | 13822725|     kjtpay|       9|     3|
     * | 13822725|      wspay|       3|     4|
     * | 13822725|   giftCard|       2|     5|
     * | 13822725|    prepaid|       1|     6|
     * | 13823083|     alipay|      94|     1|
     * | 13823083|        cod|      18|     2|
     * | 13823083|     kjtpay|      12|     3|
     * | 13823083|      wspay|       7|     4|
     * | 13823083|   giftCard|       1|     5|
     * |138230919|     alipay|      98|     1|
     * |138230919|        cod|      15|     2|
     * |138230919|     kjtpay|       7|     3|
     * |138230919|      wspay|       3|     4|
     * |138230919|   chinapay|       1|     5|
     * |138230919| chinaecpay|       1|     6|
     * | 13823681|     alipay|      87|     1|
     * | 13823681|        cod|      11|     2|
     * | 13823681|     kjtpay|       5|     3|
     * +---------+-----------+--------+------+
     */
    result.show()

    /**
     * +---------+-----------+--------+------+
     * | memberId|paymentCode|payCount|number|
     * +---------+-----------+--------+------+
     * | 13822725|     alipay|      89|     1|
     * | 13823083|     alipay|      94|     1|
     * |138230919|     alipay|      98|     1|
     * | 13823681|     alipay|      87|     1|
     * |  4033473|     alipay|     113|     1|
     * | 13822841|     alipay|      86|     1|
     * | 13823153|     alipay|     102|     1|
     * | 13823431|     alipay|      99|     1|
     * |  4033348|     alipay|     112|     1|
     * |  4033483|     alipay|      84|     1|
     * |  4033575|     alipay|     101|     1|
     * |  4034191|     alipay|      87|     1|
     * |  4034923|     alipay|      84|     1|
     * | 13823077|     alipay|     104|     1|
     * |138230937|     alipay|      80|     1|
     * |  4034761|     alipay|     110|     1|
     * |  4035131|     alipay|      86|     1|
     * | 13822847|     alipay|      74|     1|
     * |138230911|     alipay|     101|     1|
     * |  4034221|     alipay|      86|     1|
     * +---------+-----------+--------+------+
     */
    val new_Tag = result.join(five, five.col("rule") === result.col("paymentCode"))
      .select('memberId.as("userId"), 'tagsId)

    /**
     * +---------+-----------+--------+------+------+------+
     * | memberId|paymentCode|payCount|number|tagsId|  rule|
     * +---------+-----------+--------+------+------+------+
     * | 13822691|        cod|       2|     1|    34|   cod|
     * | 13822725|     alipay|      89|     1|    30|alipay|
     * | 13823083|     alipay|      94|     1|    30|alipay|
     * |138230919|     alipay|      98|     1|    30|alipay|
     * | 13823681|     alipay|      87|     1|    30|alipay|
     * |  4033473|     alipay|     113|     1|    30|alipay|
     * | 13822841|     alipay|      86|     1|    30|alipay|
     * | 13823153|     alipay|     102|     1|    30|alipay|
     * | 13823431|     alipay|      99|     1|    30|alipay|
     * |  4033348|     alipay|     112|     1|    30|alipay|
     * |  4033483|     alipay|      84|     1|    30|alipay|
     * |  4033575|     alipay|     101|     1|    30|alipay|
     * |  4034191|     alipay|      87|     1|    30|alipay|
     * |  4034923|     alipay|      84|     1|    30|alipay|
     * | 13823077|     alipay|     104|     1|    30|alipay|
     */


    new_Tag
  }

  def main(args: Array[String]): Unit = {
     

    startMain()
  }
}

小结

以上就是统计型:支付方式标签开发的流程
若有什么正确的地方还请及时反馈,博主及时更正
如能帮助到你,希望能点个赞支持一下谢谢!
在这里插入图片描述

你可能感兴趣的:(企业级360°全方位用户画像,用户画像,支付方式,标签开发)