立即注册 登录
About云-梭伦科技 返回首页

sbrui的个人空间 https://www.aboutyun.com/?60855 [收藏] [复制] [分享] [RSS]

日志

spark RowToCol 行转列 的例子

已有 2437 次阅读2017-7-25 15:48 |个人分类:spark

举个栗子 为什么要行转列
1.table-----------------------------------------------------------------------------------------------------------------
    uid  e1 e2 e3 e4 .................................e100
     0    0    1  1    1  ................................. 1
     ....
    其中 uid 为int ,e1---e100 都是 0或者1的int
   需要统计 不同的uid ,不同e值为1的数量
   result
    uid sum(e1) sum(e2) sum(e3) sum(e4) ------sum(e100)
    0         2            3             4          5       -------- 0
    .......
   解题思路
   1.字段列名过多,可以会导致利用 groupby agg 手要写费,如果字段列 不规律就更加 恐怖。。
   2.将行转列
     变成
    uid err value
    0     e1  0
    0     e2  1
    0     e3  0
    ....
   在利用 grougby agg 就很好解决了
  3. 行转列代码
     val DataSource :DataFrame
     val rowNameList:List
     val RowToCol=DataSource.map{ line =>
        val row=line
        var listData=List[(Int,Int,Int)]()
        for(i<- 0 until row.length-2){
              listData::=(row.getInt(0),rowNameList(i),row.getInt(i+1))
        } 
       listData    
    }.flatMap(x=>x).toDF("uid","err","value")


 

路过

雷人

握手

鲜花

鸡蛋

全部作者的其他最新日志

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 立即注册

关闭

推荐上一条 /2 下一条