Rumah pangkalan data tutorial mysql hadoop实例---多表关联

hadoop实例---多表关联

Jun 07, 2016 pm 04:31 PM
hadoop persatuan Contoh baik hati

多表关联和单表关联类似,它也是通过对原始数据进行一定的处理,从其中挖掘出关心的信息。如下 输入的是两个文件,一个代表工厂表,包含工厂名列和地址编号列;另一个代表地址表,包含地址名列和地址编号列。要求从输入数据中找出工厂名和地址名的对应关系,

多表关联和单表关联类似,它也是通过对原始数据进行一定的处理,从其中挖掘出关心的信息。如下

输入的是两个文件,一个代表工厂表,包含工厂名列和地址编号列;另一个代表地址表,包含地址名列和地址编号列。要求从输入数据中找出工厂名和地址名的对应关系,输出工厂名-地址名表

样本如下:

factory:

factoryname addressed
Beijing Red Star 1
Shenzhen Thunder 3
Guangzhou Honda 2
Beijing Rising 1
Guangzhou Development Bank 2
Tencent 3
Back of Beijing 1
Salin selepas log masuk

address:

addressID addressname
1 Beijing
2 Guangzhou
3 Shenzhen
4 Xian
Salin selepas log masuk


结果:

factoryname     addressname
Beijing Red Star        Beijing
Beijing Rising  Beijing
Bank of Beijing         Beijing
Guangzhou Honda         Guangzhou
Guangzhou Development Bank      Guangzhou
Shenzhen Thunder        Shenzhen
Tencent         Shenzhen
Salin selepas log masuk


代码如下:

import java.io.IOException;
import java.util.*;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.util.GenericOptionsParser;
public class MTjoin {
    public static int time = 0;
    /*
     * 在map中先区分输入行属于左表还是右表,然后对两列值进行分割,
     * 保存连接列在key值,剩余列和左右表标志在value中,最后输出
     */
    public static class Map extends Mapper {
        // 实现map函数
        public void map(Object key, Text value, Context context)
                throws IOException, InterruptedException {
            String line = value.toString();// 每行文件
            String relationtype = new String();// 左右表标识
            // 输入文件首行,不处理
            if (line.contains("factoryname") == true
                    || line.contains("addressed") == true) {
                return;
            }
            // 输入的一行预处理文本
            StringTokenizer itr = new StringTokenizer(line);
            String mapkey = new String();
            String mapvalue = new String();
            int i = 0;
            while (itr.hasMoreTokens()) {
                // 先读取一个单词
                String token = itr.nextToken();
                // 判断该地址ID就把存到"values[0]"
                if (token.charAt(0) >= '0' && token.charAt(0)  0) {
                        relationtype = "1";
                    } else {
                        relationtype = "2";
                    }
                    continue;
                }
                // 存工厂名
                mapvalue += token + " ";
                i++;
            }
            // 输出左右表
            context.write(new Text(mapkey), new Text(relationtype + "+"+ mapvalue));
        }
    }
    /*
     * reduce解析map输出,将value中数据按照左右表分别保存,
  * 然后求出笛卡尔积,并输出。
     */
    public static class Reduce extends Reducer {
        // 实现reduce函数
        public void reduce(Text key, Iterable values, Context context)
                throws IOException, InterruptedException {
            // 输出表头
            if (0 == time) {
                context.write(new Text("factoryname"), new Text("addressname"));
                time++;
            }
            int factorynum = 0;
            String[] factory = new String[10];
            int addressnum = 0;
            String[] address = new String[10];
            Iterator ite = values.iterator();
            while (ite.hasNext()) {
                String record = ite.next().toString();
                int len = record.length();
                int i = 2;
                if (0 == len) {
                    continue;
                }
                // 取得左右表标识
                char relationtype = record.charAt(0);
                // 左表
                if ('1' == relationtype) {
                    factory[factorynum] = record.substring(i);
                    factorynum++;
                }
                // 右表
                if ('2' == relationtype) {
                    address[addressnum] = record.substring(i);
                    addressnum++;
                }
            }
            // 求笛卡尔积
            if (0 != factorynum && 0 != addressnum) {
                for (int m = 0; m  <pre class="brush:php;toolbar:false"> javac -classpath hadoop-core-1.1.2.jar:/opt/hadoop-1.1.2/lib/commons-cli-1.2.jar -d firstProject firstProject/MTJoin.java
Salin selepas log masuk
jar -cvf MTJoin.jar -C firstProject/ .     
Salin selepas log masuk

删除已经存在的output

hadoop fs -rmr output
Salin selepas log masuk
hadoop fs -mkdir input
Salin selepas log masuk
hadoop fs -put factory input
Salin selepas log masuk
 hadoop fs -put address input
Salin selepas log masuk

运行

hadoop jar  MTJoin.jar MTJoin input output
Salin selepas log masuk


查看结果

 hadoop fs -cat output/part-r-00000
Salin selepas log masuk










?

作者:a331251021 发表于2013-8-4 16:20:52 原文链接

阅读:72 评论:0 查看评论

hadoop实例---多表关联

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Ralat Java: Ralat Hadoop, Cara Mengendalikan dan Mengelak Ralat Java: Ralat Hadoop, Cara Mengendalikan dan Mengelak Jun 24, 2023 pm 01:06 PM

Ralat Java: Ralat Hadoop, Cara Mengendalikan dan Mengelak Apabila menggunakan Hadoop untuk memproses data besar, anda sering menghadapi beberapa ralat pengecualian Java, yang mungkin menjejaskan pelaksanaan tugas dan menyebabkan pemprosesan data gagal. Artikel ini akan memperkenalkan beberapa ralat Hadoop biasa dan menyediakan cara untuk menangani dan mengelakkannya. Java.lang.OutOfMemoryErrorOutOfMemoryError ialah ralat yang disebabkan oleh memori mesin maya Java yang tidak mencukupi. Apabila Hadoop adalah

Penamaan konvensyen dalam PHP: Cara menggunakan penamaan kes unta untuk kelas, kaedah dan pembolehubah Penamaan konvensyen dalam PHP: Cara menggunakan penamaan kes unta untuk kelas, kaedah dan pembolehubah Jul 30, 2023 pm 02:43 PM

Penamaan konvensyen dalam PHP: Cara menggunakan notasi camelCase untuk menamakan kelas, kaedah dan pembolehubah Dalam pengaturcaraan PHP, konvensyen penamaan yang baik ialah amalan pengekodan yang penting. Ia meningkatkan kebolehbacaan dan kebolehselenggaraan kod, serta menjadikan kerja berpasukan lebih lancar. Dalam artikel ini, kami akan meneroka konvensyen penamaan biasa: camelCase dan memberikan beberapa contoh cara menggunakannya dalam PHP untuk menamakan kelas, kaedah dan pembolehubah. 1. Apakah tatanama kes unta? CamelCase ialah konvensyen penamaan biasa di mana huruf pertama setiap perkataan ditulis dengan huruf besar,

Ralat PHP: Tidak dapat mengisytiharkan kelas berulang kali, penyelesaian! Ralat PHP: Tidak dapat mengisytiharkan kelas berulang kali, penyelesaian! Aug 25, 2023 pm 04:13 PM

Ralat PHP: Tidak dapat mengisytiharkan kelas berulang kali, penyelesaian! Adalah perkara biasa bagi pembangun menghadapi masalah. Dalam pembangunan PHP, kita sering menghadapi ralat biasa: kelas tidak boleh diisytiharkan berulang kali. Masalah ini kelihatan mudah, tetapi jika tidak diselesaikan dalam masa, kod tidak akan dilaksanakan dengan betul. Artikel ini akan memperkenalkan punca masalah ini dan memberikan penyelesaian untuk rujukan anda. Apabila kami mentakrifkan kelas dalam kod PHP, jika kelas yang sama ditakrifkan beberapa kali dalam fail yang sama atau berbilang fail, ralat yang kelas tidak boleh diisytiharkan berulang kali akan berlaku. ini adalah

Teknologi pembungkusan dan aplikasi dalam PHP Teknologi pembungkusan dan aplikasi dalam PHP Oct 12, 2023 pm 01:43 PM

Teknologi enkapsulasi dan enkapsulasi aplikasi dalam PHP ialah konsep penting dalam pengaturcaraan berorientasikan objek Ia merujuk kepada merangkum data dan operasi pada data bersama-sama untuk menyediakan antara muka akses bersatu kepada program luaran. Dalam PHP, enkapsulasi boleh dicapai melalui pengubahsuai kawalan akses dan definisi kelas. Artikel ini akan memperkenalkan teknologi enkapsulasi dalam PHP dan senario aplikasinya, dan menyediakan beberapa contoh kod khusus. 1. Pengubah suai kawalan capaian berkapsul Dalam PHP, pengkapsulan dicapai terutamanya melalui pengubahsuai kawalan capaian. PHP menyediakan tiga pengubah kawalan akses,

Menggunakan Hadoop dan HBase dalam Beego untuk penyimpanan data besar dan pertanyaan Menggunakan Hadoop dan HBase dalam Beego untuk penyimpanan data besar dan pertanyaan Jun 22, 2023 am 10:21 AM

Dengan kemunculan era data besar, pemprosesan dan penyimpanan data menjadi semakin penting, dan cara mengurus dan menganalisis sejumlah besar data dengan cekap telah menjadi cabaran bagi perusahaan. Hadoop dan HBase, dua projek Yayasan Apache, menyediakan penyelesaian untuk penyimpanan dan analisis data besar. Artikel ini akan memperkenalkan cara menggunakan Hadoop dan HBase dalam Beego untuk storan dan pertanyaan data besar. 1. Pengenalan kepada Hadoop dan HBase Hadoop ialah sistem storan dan pengkomputeran teragih sumber terbuka yang boleh

Ketahui contoh amalan terbaik penukaran penunjuk di Golang Ketahui contoh amalan terbaik penukaran penunjuk di Golang Feb 24, 2024 pm 03:51 PM

Golang ialah bahasa pengaturcaraan yang berkuasa dan cekap yang boleh digunakan untuk membangunkan pelbagai aplikasi dan perkhidmatan. Di Golang, penunjuk ialah konsep yang sangat penting, yang boleh membantu kami mengendalikan data dengan lebih fleksibel dan cekap. Penukaran penunjuk merujuk kepada proses operasi penunjuk antara jenis yang berbeza Artikel ini akan menggunakan contoh khusus untuk mempelajari amalan terbaik penukaran penunjuk di Golang. 1. Konsep asas Di Golang, setiap pembolehubah mempunyai alamat, dan alamat adalah lokasi pembolehubah dalam ingatan.

Hubungan antara bilangan kejadian Oracle dan prestasi pangkalan data Hubungan antara bilangan kejadian Oracle dan prestasi pangkalan data Mar 08, 2024 am 09:27 AM

Hubungan antara bilangan contoh Oracle dan prestasi pangkalan data Pangkalan data Oracle ialah salah satu sistem pengurusan pangkalan data hubungan yang terkenal dalam industri dan digunakan secara meluas dalam penyimpanan dan pengurusan data peringkat perusahaan. Dalam pangkalan data Oracle, contoh adalah konsep yang sangat penting. Contoh merujuk kepada persekitaran berjalan pangkalan data Oracle dalam ingatan Setiap contoh mempunyai struktur memori dan proses latar belakang yang bebas, yang digunakan untuk memproses permintaan pengguna dan mengurus operasi pangkalan data. Bilangan kejadian mempunyai kesan penting terhadap prestasi dan kestabilan pangkalan data Oracle.

Bagaimana untuk mengaitkan kunci asing MySQL dan kunci utama secara automatik? Bagaimana untuk mengaitkan kunci asing MySQL dan kunci utama secara automatik? Mar 15, 2024 pm 12:54 PM

Bagaimana untuk mengaitkan kunci asing MySQL dan kunci utama secara automatik? Dalam pangkalan data MySQL, kunci asing dan kunci utama adalah konsep yang sangat penting. Ia boleh membantu kami mewujudkan hubungan antara jadual yang berbeza dan memastikan integriti dan konsistensi data. Dalam proses aplikasi sebenar, selalunya perlu untuk mengaitkan kunci asing secara automatik kepada kunci utama yang sepadan untuk mengelakkan ketidakkonsistenan data. Berikut akan memperkenalkan cara melaksanakan fungsi ini melalui contoh kod tertentu. Pertama, kita perlu mencipta dua jadual, satu sebagai jadual induk dan satu lagi sebagai jadual hamba. Buat dalam jadual utama

See all articles