簡體   English   中英

連接兩個相等的數據集而沒有鍵

[英]Join Two Equal Datasets Without A Key

使用Hadoop,我想聯接兩個具有相同記錄數但不攜帶行號的文件。 例如A.txt

a xx
b y
c z

和B.txt

1 r
2 s
3 d

加入后我需要

a xx 1 r
b y 2 s
3 d c z

這是IOW完美的並排連接。 我不知道如何在Hadoop中執行此操作,我相信我需要兩個文件都進行初始傳遞以附加行號嗎?

利用Pig的答案和/或map / reduce技巧的各種組合都很好。

這篇文章給你一個提示: 關於特殊輸入格式的SO POST

輸入格式可以產生行號作為鍵,而不是提供字節偏移量。 這樣,您可以簡單地使用單位映射器(僅發出鍵值)並在化簡器中進行串聯。 看起來似乎很難,但是它只是覆蓋了輸入格式中的幾個函數,您已經完成了。

這應該在Pig中起作用:

A = load 'A.txt';
B = load 'B.txt';

rankedA = RANK A;
joined = JOIN rankedA BY $0, B BY $0;

然后,您可以根據需要使用FOREACH語句進一步對列進行重新排序。

我認為由於這兩個文件的記錄數相等,因此您可以僅使用一次通過(一張地圖歸約工作)來進行以下聯接:

  1. 您可以將兩個文件加載到兩個不同的臨時表中。
  2. 現在,您可以在Hive中創建UDF以生成行號(例如從1開始),然后從Hive臨時表中選擇字段以創建最終表,該表將包含三列,即額外的列將包含行號。
  3. 現在,您可以使用行號連接兩個最終表。

希望這可以幫助您的事業。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM