可以借用 sql 的連線來解釋
假設 表a、表b
內連線: a.name = b.name 儲存共有的相同值屬性
外連線:
左外連線:
以 外來鍵表a(左)屬性為基準。
包含a屬性整列。
b屬性符合a屬性值的存入,其餘b屬性被置為 null。
右外連線:
以 外來鍵表b
(右)屬性為基準。
包含b屬性整列。b屬性符合a屬性值的存入,其餘a屬性被置為 null。
全連線:
a、b 屬性整列包含。 符合條件置入同一行 不符合的都置為 null
反連線:
全連線 - 內連線的結果。 也就是最終只包含 兩表外來鍵都不匹配的值
笛卡爾積:
(叉乘—— 返回行數等於兩個錶行數的乘積) 用乙個表中的每一條記錄匹配另外乙個表中的每一條記錄。
reduce 端連線:
reduce 端連線模式通過某個外來鍵將多個大資料集連線起來。
reduce 端連線通常需要消耗大量的網路頻寬,且如果所有資料及都非常大(其中任何乙個都不可以放入乙個記憶體中時),reduce 端連線可能成為唯一選擇。
適用場景:
多個大資料集需要按乙個外來鍵做連線操作。 (如果除了乙個資料集以外其他所有的資料集都可以放入記憶體,可以嘗試複製連線。)
需要靈活的執行任意型別的連線操作。
結構:
的記錄的外來鍵作為 k,整條記錄作為 v, 同時輸出v 通過乙個資料集的唯一表示 例如a、b。
可以選擇雜湊的 partitioner。或者建立自定義 partitioner 來講傳送到 reduce 端的資料更為均勻。
reducer 通過手機每個輸入分組的值並存入乙個臨時列表來執行需要的連線操作。分割槽:如:a 連線的記錄存在a 列表,b連線的記錄存在b列表。然後迭代選擇兩個集合的記錄操作。 內連線只有兩邊記錄都不為空才有結果輸出,外連線空列表同樣可以與非空列表做連線,對於非空列表則直接輸出空可寫物件即可。
結果:
輸出的 part 結果檔案的數目 取決於 reduce 任務數。 如果是外連線或者反連線,那麼很多列可能是 null。
效能:
乙個 reduce 端連線會給集群網路帶來很大壓力, 抽取每一條資料外來鍵跟這條資料一起傳送到 reduce, 且傳送之前不會對資料過濾,所以所有資料都會被傳送到混排和 排序階段。 如果不包含笛卡爾積的方式 這種方式還是可以的
reduce 端連線示例:
剔除 不必要屬性
的乙個地方。)
。 v 中前置字母區分資料表、
outvalue.set(
"a"+ value.tostring())
; reduce 碼 : 將每組所有值複製到記憶體, 並區分那條記錄是來自哪個資料集的。然後所有記錄被連線起來輸出。
注意點:
確保有合適的字段分隔符,當輸出乙個空文字是不明智的。應該生成一條包含合適結構但帶有空字段的記錄。而不是只輸出乙個物件。這樣能確保後續分析的正確解析
以下是**部分。 舉例內連線、左外連線、 反連線。
reduce 主體:
內連線:
左外連線:
全外連線:
反外連線:
書上的有問題, 反外連線求法是在內連線基礎上, 遍歷 a 如果 a = b出現。不 add 入這個集合。 然後在遍歷 b 如果 b=a 出現 不記錄這個集合即可。
來自為知筆記(wiz)
13 連線查詢
假設 a 表中有3條記錄,b表中有 4 條記錄 那麼,語句select from a,b 會將a,b兩張表的資料交叉拼接起來,形成 3 4 12 條記錄的結果集,此結果集叫做笛卡爾積。ora 00918 未明確定義列 改進辦法 明確列的所屬 select empno,ename,emp.deptno...
004 連線查詢
再大多數的情況下,我們都需要進行連線查詢.笛卡爾積的產生 這個就是多表查詢的的最初結果集,那麼以後我們需要作的就是從結果集中篩選出需要的結果集.篩選的方式不同,導致sql的效率不同.篩選的方式就是加入連線標準.等值連線 select 字段 from 表1 表2 where 連線條件.eg 查詢員工名...
h2連線模式
h2連線模式 嵌入方式 本地使用jdbc訪問 伺服器方式 遠端通過tcp ip使用jdbc,odbc訪問 混合方式 同時相容嵌入方式和伺服器方式 嵌入方式 jdbc h2 file home目錄 jdbc h2 test 其他 jdbc h2 file c jdbc h2 file 記憶體資料庫 資...