python streaming 實現某個字段排序

2021-08-21 07:59:16 字數 2141 閱讀 8674

一,hadoop streaming預設情況

1,在hadoop streaming的預設情況下,是以\t作為分隔符的,標準輸入時,每行的第乙個\t之前的內容作為key,第乙個\t之後的內容作為value。注意,如果乙個\t字元都沒有,那麼整行作為key。

2,streaming的一些引數如下:

-d stream.map.output.field.separator

:設定map輸出中key和value的分隔符 

-d stream.num.map.output.key.fields

:  設定map程式分隔符的位置,該位置之前的部分作為key,之後的部分作為value 

-d map.output.key.field.separator: 設定map輸出中key內部的分割符

-d num.key.fields.for.partition: 指定分桶時,key按照分隔符切割後,其中用於分桶key所佔的列數(配合-partitioner org.apache.hadoop.mapred.lib.keyfieldbasedpartitioner 使用)

-d stream.reduce.output.field.separator

:設定reduce輸出中key和value的分隔符 

-d stream.num.reduce.output.key.fields

:設定reduce程式分隔符的位置

二,python streaming 實現某個欄位的排序

1, 輸入資料: cat data.txt  (中間是tab鍵)

11         2

11 3

11 4 1

11 1

11 12 22

2,streaming程式如下:

vim sorted.sh

#!/bin/bash

export current=/home/chunhe.liao/hadoop_streaming/sort

/usr/local/hadoop-2.6.3/bin/hadoop jar /usr/local/hadoop-2.6.3/share/hadoop/tools/lib/hadoop-streaming-2.6.3.jar \

-d stream.map.output.field.separator='\t' \

-d stream.num.map.output.key.fields=3 \

-d mapreduce.job.output.key.comparator.class=org.apache.hadoop.mapreduce.lib.partition.keyfieldbasedcomparator \

-d mapreduce.partition.keycomparator.options=-k3,3nr \ # 按照第三列逆序排列,可以根據想要的第幾段來選擇。

-input "/user/test/inputdata/datas3/data.txt" \

-output "/user/test/streaming/sorted_20180711" \

-reducer "python reducer.py" \

-file "$current/reducer.py"

# -*- coding: utf-8 -*-

import sys

for line in sys.stdin:

line = line.strip()

print(''.format(line))

(3) reducer.py

# -*- coding: utf-8 -*-

import sys

for line in sys.stdin:

line = line.strip()

print("".format(line))

執行命令:

bash sorted.sh

執行結果:hdfs dfs -cat /user/test/streaming/sorted_20180711/part-00000

11 12 22

11 3

11 2

11 4 1

11 1

oracle拆分某個字段

表 uf wzlb 物資類別 表 uf wzzl 物資種類 表 uf wzlb wzzl 物資類別和物資種類關聯表,物資類別與物資種類為一對多關係 如,物資類別編碼為 wzlb 201805100004 該物資類別繫結了多個物資種類,繫結的物資種類編碼為 wzzl 201805100044,wzzl...

mysql 替換某個欄位中的某個字元

遇到這麼個情況 比如 msql裡面的某個表的某個字段裡面儲存的是乙個人的位址,有一天這個位址的裡面的某個地 名變了,那麼他的位址也就要變 比如 原來是 csharp view plain copy number addr 01 四川省成都市 街道05號 02 四川省成都市 街道07號 03 四川省成...

mysql替換某個欄位中的某個字元

比如 msql裡面的某個表的某個字段裡面儲存的是乙個人的位址,有一天這個位址的裡面的某個地 名變了,那麼他的位址也就要變 比如 原來是 number addr 01 中國浙江 02 中國浙江 03 中國浙江 現在位址改了 浙江 搬到了 上海 所以,addr欄位裡面的所有的值,都要把 浙江 改為 上海...