MapReduce程式設計-自連線
SQL自連線
SQL自身連線,可以解決很多問題。下面舉的一個例子,就是使用了SQL自身連線,它解決了列與列之間的邏輯關係問題,準確的講是列與列之間的層次關係。
對於下面的表cp(儲存的孩子和父母的關係),用一個SQL,找出所有的 grandchild 和 grandparent,就是找出所有的 孫子 -> 祖父母
+-------+--------+ | child | parent | +-------+--------+ | tom | jack | | hello | jack | | tom | tong | | jack | gao | | tom | jack | | hello | jack | | tong | haha | +-------+--------+
可用如下SQL
select t1.child,t2.parent from cp t1,cp t2 where t1.parent = t2.child;
結果如下:
+-------+--------+
| child | parent |
+-------+--------+
| tom | gao |
| hello | gao |
| tom | haha |
+-------+--------+
MapReduce程式設計實現
上面的SQL其實是做了一個笛卡爾積,怎麼用MR演算法來實現呢?
使用連線列作為key來實現相等匹配。需要讓map的輸出能包含左右兩張表(t1,t2)的資訊。
對於如下的輸入檔案:
Tom Lucy
Tom Jack
Jone Lucy
Jone Jack
Lucy Mary
Lucy Ben
Jack Alice
Jack Jesse
Terry Tom
map的輸出是:
Tom parent_Lucy
Lucy child_Tom
Tom parent_Jack
Jack child_Tom
.....
其實就是每條記錄都重複兩次,來表示兩張表。
map函式如下:
public void map(Object key, Text value, Context context) throws IOException, InterruptedException { String strs[] = value.toString().split(" "); if (strs.length == 2) { context.write(new Text(strs[0]), new Text("parent_" + strs[1])); context.write(new Text(strs[1]), new Text("child_" + strs[0])); } }
reduce函式:
public void reduce(Text text, Iterable<Text> values, Context context)
throws IOException, InterruptedException {
List<Text> grandchilds = new ArrayList<Text>();
List<Text> grandparents = new ArrayList<Text>();
for (Text name : values) {
if (name.toString().trim().startsWith("child_")) {
grandchilds.add(new Text(name.toString().substring(6)));
} else if (name.toString().trim().startsWith("parent_")) {
grandparents.add(new Text(name.toString().substring(7)));
}
}
for (Text gchild : grandchilds) {
for (Text gparent : grandparents) {
context.write(gchild, gparent);
}
}
}
}
輸出結果為:
JoneJesse
JoneAlice
TomJesse
TomAlice
TomBen
TomMary
JoneBen
JoneMary
TerryJack
TerryLucy
相關推薦
MapReduce程式設計-自連線
SQL自連線 SQL自身連線,可以解決很多問題。下面舉的一個例子,就是使用了SQL自身連線,它解決了列與列之間的邏輯關係問題,準確的講是列與列之間的層次關係。 對於下面的表cp(儲存的孩子和父母的關係),用一個SQL,找出所有的 grandchild 和 grandpare
Hadoop鏈式MapReduce、多維排序、倒排索引、自連線演算法、二次排序、Join效能優化、處理員工資訊Join實戰、URL流量分析、TopN及其排序、求平均值和最大最小值、資料清洗ETL、分析氣
Hadoop Mapreduce 演算法彙總 第52課:Hadoop鏈式MapReduce程式設計實戰...1 第51課:Hadoop MapReduce多維排序解析與實戰...2 第50課:HadoopMapReduce倒排索引解析與實戰...3 第49課:Hado
讀Muduo原始碼筆記---4(TCP自連線)
1、問題原因 svr掛掉了,埠釋放了,cli去connect這個目的埠的時候正好選擇了這個埠作為源埠,此時埠沒人用,使用是合法的。於是自連線形成了。 就是出現源ip和源埠通目的ip和目的埠完全相同的情況,也就是在服務端沒有啟動,客戶端也可以連線成功,但會造成服務端無法啟動
Hadoop完全分散式用MapReduce實現自定義排序、分割槽和分組
經過前面一段時間的學習,簡單的單詞統計已經不能實現更多的需求,就連自帶的一些函式方法等也是跟不上節奏了;加上前面一篇MapReduce的底層執行步驟的瞭解,今天學習自定義的排序、分組、分割槽相對也特別容易。 認為不好理解,先參考一下前面的一篇:https://bl
自連線
到目前為止,我們講解的連線都是在不同的資料表之間進行的,其實參與連線的表完全可以是同一樣表,也就是表與其自身相連線,這樣連線就被稱為自連線。自連線並不是獨立於交叉連線、內連線、外連線等這些連線方式之外的另外一種連線方式,而只是這些連線方式的一種特例,也就是交叉連線、內連線、外連線等連線方式中只要參與連線的表是
MapReduce程式設計
MapReduce Coding Criteria 單個MapReduce 單元運算 以WordCount為例 分別編寫Map和Reduce函式 編寫main方法,設定環境變數,進行註冊:
MapReduce中自定義分割槽
package tq; import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.mapreduce.Partitioner; public class MyPartition extends Partitioner<
MapReduce中自定義比較
package tq; import org.apache.hadoop.io.WritableComparable; import org.apache.hadoop.io.WritableComparator; public class MySortComparator extends W
sql語句_自連線_外連線_左連線_子查詢_排序_分組
資料庫 sql語句 分為DDL,DCL,DLL 1),DDL,data define language: 新建一個數據庫 ceate建立 alter修改 drop刪 這三條語句,在下面幾個元件中,都可以用得到 資料庫分為下面幾個元件 a,資料庫,database #如果之前已
大資料技術學習筆記之Hadoop框架基礎2-MapReduce程式設計及執行流程
一、回顧 -》hadoop的功能? -》海量資料儲存和海量計算問題 -》分散式檔案儲存框架hdfs和
簡單的單表自連線查詢
insert into SayReply values ('其實我也不知道為啥不好','2017-04-21 11:34:43','曹操',3)insert into SayReply values ('我知道心情為啥不好','2017-04-21 11:35:36','諸葛亮',1)insert into
編寫簡單的Hadoop程式(自連線)
準備工作: 如一個列為child,一個列為parent,需要找出grandchile, grandParent 如資料 Lucy Tom Lucy Jone Tom Heimi Tom QiQi Jone Candy Jone God Lucy有四個grandParent:Heimi
大資料之Hadoop學習——動手實戰學習MapReduce程式設計例項
文章目錄 一、MapReduce程式設計例項 1.自定義物件序列化 需求分析 報錯:Exception in thread "main" java.lang.IllegalArgumentExcept
MapReduce程式設計之Combiner
Combiner 可以理解為本地的reducer,減少了Map Tasks輸出的資料量以及資料網路傳輸量 編譯執行: hadoop jar /home/zq/lib/HDFS_Test-1.0-SNAPSHOT.jar MapReduce.CombinerAp
Python實現一個最簡單的MapReduce程式設計模型WordCount
MapReduce程式設計模型: Map:對映過程 Reduce:合併過程 import operator from functools import reduce # 需要處理的資料 lst = [ "Tom", "Jack",
mysql 外連結 自連線
假設有兩張表,分別為表a和表b, a: id name nick_name 1 張三 張三 2 李四 李 3 王五 王五 b: id age a_id 1 23 1
MapReduce之自定義WordCount案例
在一堆給定的文字檔案中統計輸出每一個單詞出現的總次數。 1.分析 mapper階段: 將mapstack 傳給我們的文字資訊內容先轉換成string。 根據空格將一行切分成單詞。 將單詞輸出為<單詞,1>的格式。 reducer階段
讀Muduo原始碼筆記(TCP自連線)---4
1、問題原因 svr掛掉了,埠釋放了,cli去connect這個目的埠的時候正好選擇了這個埠作為源埠,此時埠沒人用,使用是合法的。於是自連線形成了。 就是出現源ip和源埠通目的ip和目的埠完全相同的情況,也就是在服務端沒有啟動,客戶端也可以連線成功,但會造成服務端無法啟
MapReduce中自定義檔案輸出名
MR的輸出結果預設為part-r-00000,我們可自定義易識別的名字替代part,如score-r-00000/ job.setOutputFormatClass(MyOut.class); MyOut.setOutputN
SQL Server中的自連線
不要配不上自己的野心,辜負了曾經歷的苦難 一、建庫和建表 create database scort use scort create table emp ( empno int primary key, ename nvarchar(10), sal int,