递归拼复合维度key

场景:当复合维度进行分析是,为了保证查询的速度,此时就要对维度进行拼接

三个维度

来源维度设备维度地域维度
全部来源全部设备全部地域
全部来源具体设备全部地域
具体来源全部设备全部地域
具体来源具体设备全部地域
全部来源全部设备具体地域
全部来源具体设备具体地域
具体来源全部设备具体地域
具体来源具体设备具体地域

总共9种key

此时就有两种拼接方法

  1. 直接手动拼接
  2. 递归拼接
package cn.doit

import java.util
import java.util.Date

import cn.doit.utils.{ConfigUtils, TimeUtils}

import scala.collection.mutable

object SparkTest {
  /**
    * 拼接之后存放的集合
    */
  val result = new util.ArrayList[String]()
  def conbinKeyWorker(list: List[Array[String]], str: String): Unit = {

    list.head.foreach(t => {
      val s = str + "@" + t
      if (!list.tail.isEmpty) {
        conbinKeyWorker(list.tail, s)
      }
    })

    if (list.tail.isEmpty) {
      list(0).foreach(a=>{
        result.add(str+"@"+a)
      })

    }
  }

  def combinKey(arr: Array[String]*): util.ArrayList[String] = {
    val list: List[Array[String]] = arr.toList
    list.head.foreach(a => {
      conbinKeyWorker(list.tail, a)
    })

    result
  }

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

    val arr1 = Array("All", "source")
    val arr2 = Array("All", "deviceType")
    val arr3 = Array("All", "province")
    val arr4 = Array("All", "ssss")
    val strings: util.ArrayList[String] = combinKey(arr1, arr2,arr3)
    import scala.collection.JavaConversions._
    for(i<-strings){
      println(i)
    }

    /*val list = new util.ArrayList[String]()
    arr1.foreach(a => {
      arr2.foreach(b => {
        arr3.foreach(c => {
          val str = a + "@" + b + "@" + c
//          println(str)
          list.add(str)
        })
      })
    })
  import scala.collection.JavaConversions._
    for(i <- list){
      println(i)
    }*/
  }
}

结果展示:

All@All@All
All@All@province
All@deviceType@All
All@deviceType@province
source@All@All
source@All@province
source@deviceType@All
source@deviceType@province
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值