1. 程式人生 > >spark兩種自定義排序方式

spark兩種自定義排序方式

一、目標物件新增隱式轉換函式的方式實現自定義排序

object MySort{
  //為student類新增隱式轉換函式
  implicit val stuOrdering = new Ordering[student]{
    override def compare(x: student, y: student) = {
      //自定義排序格式為:預設按年齡升序排序,當年齡相同時,按分數降序排序
      if(x.age != y.age){
        x.age - y.age
      }else{
        y.score - x.score
      }
    }
  }
}

/**
  * 隱式轉換函式實現自定義排序
  */
object CustomSort1{
  def main(args: Array[String]): Unit = {
    //1.建立配置物件
    val conf = new SparkConf().setAppName("sort1").setMaster("local[2]");
    //2.建立叢集入口類物件
    val sc = new SparkContext(conf);

    //3.並行化的方式生成rdd
    val rdd = sc.parallelize(Array(("tom",24,92),("ko",24,97),("mark",28,88),("jack",18,86)))

    //4.對資料進行排序
    //引入隱式轉換函式
    import MySort.stuOrdering
    val resRdd = rdd.sortBy(x => student(x._1,x._2.toInt,x._3.toInt))

    //5.列印排序後的結果資料
    println(resRdd.collect().toBuffer)


  }
}
//學生類
case class student(name:String,age:Int,score:Int)

二、目標物件實現Ordered特質的方式實現自定義排序

object CustomSort2{
  def main(args: Array[String]): Unit = {
    //1.建立配置物件
    val conf = new SparkConf().setAppName("sort2").setMaster("local[2]");
    //2.建立叢集入口類物件
    val sc = new SparkContext(conf);

    //3.並行化的方式生成rdd
    val rdd = sc.parallelize(Array(("tom",24,92),("ko",24,97),("mark",28,88),("jack",18,86)))

    //4.對資料進行排序
    val resRdd = rdd.sortBy(x => student2(x._1,x._2.toInt,x._3.toInt))

    //5.列印排序後的結果資料
    println(resRdd.collect().toBuffer)

  }
}

case class student2(name:String,age:Int,score:Int) extends Ordered[student2]{

  override def compare(that: student2): Int = {
    if(this.age != that.age){
      this.age - that.age
    }else{
      that.score - this.score
    }
  }
}

相關推薦

spark定義排序方式

一、目標物件新增隱式轉換函式的方式實現自定義排序object MySort{ //為student類新增隱式轉換函式 implicit val stuOrdering = new Orderin

excel2013如何通過定義排序方式來進行排序

資料 process html 技術 完整 通過 序列 解決辦法 需求 在實際中,我們肯定會有這麽一種需求,即按照自定義的順序來排序。解決辦法就是,我們自定義一個序列給Excel,然後讓Excel按照這個序列來進行排序。如圖 【解決方法,教程視頻資料如下】 本教程視頻資料來

spark中實現定義排序

排序的方式可以分為6中: (1)使用一個自定義一個普通的類繼承Ordered[User] with Serializable import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext}

salesforce lightning零基礎學習(七) 列表展示資料時定義編輯頁面

上一篇Lightning內容描述的是LDS,通過LDS可以很方便的例項化一個物件的資料資訊。當我們通過列表展示資料需要編輯時,我們常使用兩種方式去處理編輯頁面:Pop Up Window彈出修改詳情以及在本頁面隱藏詳情頁面顯示編輯頁面。  實現這個功能以前主要需要先了解幾個標籤: lightning:reco

Oracle 定義排序方式

-- Start 首先準備下面的測試資料。 CREATE TABLE price ( id NUMBER(10, 0), price_source VARCHAR(10), price NUMBER(30,

定義安全鍵盤&遮蔽系統輸入法

本文主要講兩種自定義安全的鍵盤的實現,還有遮蔽系統輸入法!(尤其是如果裝置上裝有谷歌中文輸入法,遮蔽谷歌輸入法【4.0版本以上】失效的情況) 目錄 第一種自定義鍵盤實現 自定義一個view繼承ViewGroup,ViewGroup裡面放鍵盤對

java 方式實現定義排序

package test; //Comparable 使物件本身具有可比性,這種方式稱為元素的自然順序或預設順序 //Comparator 元素自身不具備比較性或者比較性不是所需要的,在集合初始化讓其具有比較性 (更實用) import java.util.*; //cl

spark清理資料的方式:UDF,定義函式,spark.sql;Python中的zip()與*zip()函式詳解//及python中的*args和**kwargs

(1)UDF的方式清理資料 import sys reload(sys) sys.setdefaultencoding('utf8') import re import json from pyspark.sql import SparkSession

spark定義排序規則

package cn.edu360.day5 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /** * Created by zx on 2017/10/10. */ o

Spark-Core定義排序規則

1.利用case特性,定義一個類,在類中進行排序 package day02 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} object UserOrdered01 {

Spring的事務定義方式

一、宣告式 這種方法不需要對原有的業務做任何修改,通過在XML檔案中定義需要攔截方法的匹配即可完成配置,要求是,業務處理中的方法的命名要有規律,比如setXxx,xxxUpdate等等。詳細配置如下: [html] view plain copy  print?

spark 定義排序詳解

目的:        排序輸出資料是資料處理的常見操作,本篇部落格示例解決元組、字串按照key、value進行單值、多值 自定義排序問題。 程式碼 package LoadTest import org.apache.log4j.{Logger, Level} impo

計算並設定ListView的高度,防止巢狀ScrollView監聽出現問題,(方法,一定義,一測量)

第一種自定義ListView public class MyListView extends ListView { public MyListView(Context context) { super(context);

配置adpater的方式

and adapt source ada ray har spin cad layout 第一種:資源文件配置 ArrayAdapter<CharSequence> cadapt=ArrayAdapter.createFromResource(this, 資源i

跨平臺C++開源碼的經常使用編譯方式

使用 文件夾 有一種 href dsm ever 源碼 .net log 作者:朱金燦來源:http://blog.csdn.net/clever101 跨平臺C++開源代碼為適應各種編譯器的編譯,採用了兩種方式方面來適配。一種是makefile方

快速切圖方式

-h 動手 切片 文件 view 幫我 pack com upload 今天給大家分享一下我自己在前端工作中的一些切圖小技巧,雖然好的UI會給我們把圖切好,但是他們切的圖不一定百分之百符合我們的需求,所以還是自己動手豐衣足食嘛,看本教程之前希望大家能先看看慕課網的切圖教

java中實現Comparable接口實現定義排序

static -1 return rabl generated args logs ava sca 1 class Student implements Comparable{ 2 String name; 3 int gpa; 4 @Ov

javascript中基本常用排序算法分析

穩定 得到 直觀 height 算法 錯誤 繼續 改進冒泡 有序 備註:內容大部分從網上復制,代碼為自己手寫。僅做知識的溫故知新,並非原創。 1.冒泡排序(Bubble Sort) (1)算法描述 冒泡排序是一種簡單的排序算法。它重復地走訪過要排序的數列,一次比較兩個

織夢按權重排序定義排序

load ima row idt last 教程 syn 模板文件 而已 【按權重排序】 dede:list 的方法 1、找到"根目錄\include\arc.listview.class.php"文件。 2、修改代碼:在文件第727行處添加按weight排序判斷代碼(紅色

定義對象List列表取交集(intersection)

ray new obj pre lean body 自定義 blog rgs public static void main(String[] args) { List<Fpxx> list = ListUtils.intersecti