1. 程式人生 > >Hadoop、Spark(Java、scala)實現分組、排序

Hadoop、Spark(Java、scala)實現分組、排序

1. MapReduce實現分組、排序

1.1分組

//在MapReduce 主類設定自定義分組Class
job.setGroupingComparatorClass((Class<? extends RawComparator> cls);

//例項
job.setGroupingComparatorClass(S1apEnbidGroupingComparator.class);

1.2 排序

//自定義二次排序策略
job.setSortComparatorClass(Class<? extends RawComparator> cls)

//例項
job.setSortComparatorClass(S1apEnbidSortComparator.class);

2.Java版Spark實現分組、排序

//分組
JavaPairRDD.groupByKey(reducenum);

key重寫hashCode()和equals()

//value排序
groupByKey.mapToPair(new PairFunction<Tuple2<SparkLocatorCombinedKey,Iterable<String>>, SparkLocatorCombinedKey, Iterable<String>>() {

	private static final long serialVersionUID = 8988893168013930479L;

	@Override
	public Tuple2<SparkLocatorCombinedKey, Iterable<String>> call(
			Tuple2<SparkLocatorCombinedKey, Iterable<String>> tuple2) throws Exception {
		List<String> list = copyIterator(tuple2._2.iterator());
		Collections.sort(list, new SecondSortByTimeComparator());
		return new Tuple2<SparkLocatorCombinedKey, Iterable<String>>(tuple2._1, list);
	}
});

//Iterable => Iterator => List
public static <T> List<T> copyIterator(Iterator<T> iter) {
	List<T> copy = new ArrayList<T>();
	while (iter.hasNext())
		copy.add(iter.next());
	return copy;
}
// List => Iterable 多型

//SecondSortByTimeComparator 

3.scala版Spark實現分組、排序

//分組 與Java一樣 也是hashCode()和equals()
rdd.groupByKey(reduceNum)
//value排序
rdd.mapValues(iterable => {
        iterable.toList.sortBy(sortRule)
    })

//sortRule
def sortRule(employee: Employee): (Long, String) = {
    (employee.getTimeStamp, employee.getEmployeeID)
}

相關推薦

HadoopSparkJavascala實現分組排序

1. MapReduce實現分組、排序 1.1分組 //在MapReduce 主類設定自定義分組Class job.setGroupingComparatorClass((Class<?

【算法拾遺java描寫敘述】--- 插入排序直接插入排序希爾排序

ecan itblog insert med image java程序 can rip title 插入排序基本思想 每次將一個待排序的記錄按其keyword大小插入到前面已經拍好序的子文件的適當位置,直到全部記錄插入完畢為止。 直接插入

springspringmvc和mybatis整合java config方式

ada vat req style face sat roo art 實體   之前項目中使用ssm框架大多是基於xml的方式,spring3.0以後就提供java config的模式來構建項目,並且也推薦使用這種方式,自從接觸過springboot後,深深感受到這種純ja

【小家java】POP面向過程程式設計OOP面向物件程式設計AOP面向切面程式設計三種程式設計思想的區別和聯絡

相關閱讀 【小家java】java5新特性(簡述十大新特性) 重要一躍 【小家java】java6新特性(簡述十大新特性) 雞肋升級 【小家java】java7新特性(簡述八大新特性) 不溫不火 【小家java】java8新特性(簡述十大新特性) 飽受讚譽 【小家java】java9

5.9 jjava學習筆記強軟弱虛引用及WeakHashMapIdentityHashMapEnumMap

一、引用分類 強:執行垃圾回收機制後也不回收,程式出現記憶體溢位也不回收。 軟:在垃圾回收機制執行時判斷記憶體是否已滿,如果記憶體已滿則回收,記憶體充足則不回收。 弱:垃圾回收機制執行後不論記憶體是否充足都會立即回收。 虛:虛引用和沒有引用一樣,必須配合引用佇列使用。   我們來看例子:

5.7java學習筆記VectorEnumeration

一.Vector Vector類實現一個可擴充套件的陣列物件。與陣列一樣,它包含可以使用整數索引訪問。 它的基本操作方法add(int index, E element),get(int index),indexOf(Object o)等操作方法 與陣列

[瘋狂Java]NIO.2:WatchServiceWatchKey監控檔案變化

1. 舊版本監控檔案變化的弊端:     1) 非常繁瑣,必須自己手動開啟一個後臺執行緒每隔一段時間遍歷一次目標節點並記錄當前狀態,然後和上一次遍歷的狀態對比,如果不相同就表示發生了變化,再採取相應的操作,這個過程非常長,都需要使用者自己手動實現;     2) 效率低:

Spark-RDD轉Dataset及簡單的SparkSql操作javascala版本

一、程式設計式方法 (一)java版本 public class WordPro { private static SparkSession gloableSpark; private static Logger logger = LoggerFactory.getL

平衡二叉樹AVL--查詢刪除插入Java實現

           前言                        前面一篇文章,筆者就二叉查詢樹進行了一些解釋與實現,這篇文章筆者將會就平衡二叉樹                    做一些總結與實現。讀者若不瞭解二叉查詢樹的話,可以參考這篇文章:       

Java的訪問許可權修飾符public預設包訪問許可權protectedprivate

該筆記主要記錄我對於被Java的四個訪問許可權修飾符所修飾的域和方法在被直接使用(呼叫)、繼承後的直接使用和繼承後的方法覆蓋三方面的認識: 第一,直接使用的情況:   1.被public修飾的域和

scala陣列Scala Collection集合Iterator迭代器

一、scala陣列 陣列:用來儲存固定大小的同類型元素,通過索引來訪問指定元素,索引index從0開始 宣告陣列 定義陣列--語法格式: var z:Array[String] = new Array[String](3) 或 var z = new Array[St

Spark-core運算元大全javascala,python

/** * Java版本導包相關 */ import org.apache.spark.Partitioner; import org.apache.spark.SparkConf; import org.apache.spark.api.java.JavaPairRDD

一道Java面試題之實現複製刪除剪下檔案資料夾的實現的snippet

Java面試題是叫寫出檔案複製、刪除和剪下的,所以昨天晚上就花了大概一個小時寫出這個完整的snippet(當然如果只要思路的話就好辦了)。 這個snippet中的刪除檔案(資料夾)部分有點意思,一般在Windows下目錄過長的話,目錄就刪除不了。而這個程式可以解決這個因

CentOS7 安裝 Java 8Tomcat8tar.gz安裝

在伺服器網站配置規則 進入阿里雲主機控制檯,安全組,如下圖所示,點選配置規則 配置規則,新增規則允許任何IP訪問80,如下圖所示 tar.gz下載地址 安裝JAVA8 解壓安裝 tar.gz tar -zxvf jdk

Java Collections FrameworkJAVA集合框架中的常用集合及其特點適用場景實現原理簡介

JDK提供了大量優秀的集合實現供開發者使用,合格的程式設計師必須要能夠通過功能場景和效能需求選用最合適的集合,這就要求開發者必須熟悉Java的常用集合類。本文將就Java Collections F

對封裝抽象繼承多型的理解?java四大特性

封裝是把過程和資料包圍起來,對資料的訪問只能通過自定義的介面,這個可以保護裡面的資料和結構不被修改。 繼承是實現程式碼複用的重要手段,Java的繼承具有單繼承的特點,每一個子類只允許有一個父類。通過繼承子類就可以擁有父類的部分屬性(私有屬性除外)。 抽象是概

java 技巧 去除字串中的空格回車換行符製表符正則表示式

import java.util.regex.Matcher; import java.util.regex.Pattern; public class StringUtils { public static String replaceBlank(String

java從JDK裡提取全球資料,包含國家名稱二字程式碼三字程式碼幣種名稱和程式碼和語言種類的資料

JDK版本:jdk1.8.0_66 主要需要依賴的類 import sun.util.locale.provider.LocaleProviderAdapter; import sun.util.locale.provider.ResourceBun

程式碼覆蓋度工具OpenCppCoveragecppEclEmmajavaCoveragepython使用

一、OpenCppCoverage(cpp) 1、命令列方式 (1)下載和安裝 (2)執行方法 假設已有程式MatrixUDG,生成的可執行檔名稱為:MatrixUDG.exe,存放目錄:F:\code\Cpp\VS\DailyPractice\

IOS Core MotionUIAccelerometer加速計使用

就會 property 檢測 isp active 設備 是否 data img 加速計 ● 加速計的作用 ● 用於檢測設備的運動(比如搖晃) ● 加速計的經典應用場景 ● 搖一搖 ● 計步器 ● 加速計程序的開發 ● 在iOS4以前:使用UIA