spark函数学习---(Dateset)

1.代码

    // map:将数据集中的每条数据都做一个映射,返回一条新数据
    // flatMap:数据集中的每条数据都可以返回多条数据
    // mapPartitions:一次性对一个partition中的数据进行处理
    employeeDS.map { employee => (employee.name, employee.salary + 1000) }.show()  
    departmentDS.flatMap { 
      department => Seq(Department(department.id + 1, department.name + "_1"), Department(department.id + 2, department.name + "_2"))
    }.show()
    employeeDS.mapPartitions { employees => {
        val result = scala.collection.mutable.ArrayBuffer[(String, Long)]() 
        while(employees.hasNext) {  
          var emp = employees.next()  
          result += ((emp.name, emp.salary + 1000))
        }
        result.iterator
      }
    }.show()   

2.代码 Dateset两个表进行连接

   employeeDS.joinWith(departmentDS, $"depId" === $"id").show()    

3.代码

// 排序
employeeDS.sort($"salary".desc).show()

4.代码

//切分:randomSplit,sample
//randomSplit(Array(3, 10, 20)) 切分权重,第一个是切3份
 val employeeDSArr = employeeDS.randomSplit(Array(3, 10, 20))  
    employeeDSArr.foreach { ds => ds.show() }  
              //抽取0.3的比例切分
    employeeDS.sample(false, 0.3).show()  

 5.聚合函数

 employee
        .join(department, $"depId" === $"id")  
        .groupBy(department("name"))
        .agg(avg(employee("salary")), sum(employee("salary")), max(employee("salary")), min(employee("salary")), count(employee("name")), countDistinct(employee("name")))
        .show()

6.代码

// collect_list和collect_set,都用于将同一个分组内的指定字段的值串起来,变成一个数组
     // 常用于行转列
     // 比如说
     // depId=1, employee=leo
     // depId=1, employee=jack
     // depId=1, employees=[leo, jack]
     //---两个的区别 collect_list是不会去重的。collect_set会去重
employee .groupBy(employee("depId")) .agg(collect_set(employee("name")), collect_list(employee("name"))) .collect() .foreach(println(_))

7.其他函数要查官网

   // 日期函数:current_date、current_timestamp
    // 数学函数:round
    // 随机函数:rand
    // 字符串函数:concat、concat_ws  //concat和concat_ws的区别。都是两个字段的值连接。concat_ws可以指定两个字段值中间加字符
    // 自定义udf和udaf函数
    
    // http://spark.apache.org/docs/latest/api/scala/index.html#org.apache.spark.sql.functions$
    
    employee
        .select(employee("name"), current_date(), current_timestamp(), rand(), round(employee("salary"), 2), concat(employee("gender"), employee("age")), concat_ws("|", employee("gender"), employee("age")))  
        .show()  

 

posted @ 2018-08-23 18:29  聚云  阅读(305)  评论(0)    收藏  举报