pinvmap

来源:互联网 发布:c语言web攻击脚本 编辑:程序博客网 时间:2024/06/07 01:33
#!/usr/bin/env python
import sys
import typedbytes   #import typedbytes这儿的是python的,不同于sh文件里的-io typedbytes \(这是hadoop自带的typedbytes).python的是为了Hadoop的而产生的
import numpy as np
import io
import re

input = typedbytes.PairedInput(sys.stdin)   #python的typedbytes把hadoop的序列流转换成key,value对
output = typedbytes.PairedOutput(sys.stdout)     #python的typedbytes把key,value对转换成序列流

pattern = r'(\d+)_(\d+).*$'
p = re.compile(pattern)


def load_config(d):                             #定义了一个函数
    f = open("test.cfg") # use "-file test.cfg" in bash file first.这儿的文件用的是上传到HDFS上的文件。见sh文件。mapreduce
    for line in f.readlines():
        if line[0] == '#': continue
        (key,val) = line.strip().split(':')
        d[key] = [int(i) for i in val.split(',') if i.isdigit()]     #字典里边的key是key本身,value是后边的value以逗号进行分割,每一项进行了int转换。
        if len(d[key]) == 0: d[key] = val.split(',')        #处理非数字的value

cfgdict = dict()                               #定义了一个字典
load_config(cfgdict)

fs = cfgdict['fs'][0]   #0表示是该字典的'fs'key对应的第一个value值
low = cfgdict['low'][0]
high = cfgdict['high'][0]
fc = fs/2
assert 0 <= low <= high <= fc

x_ch_list = cfgdict['x']   #x_ch_list表示是该字典的‘x’key对应的value()列表。    好好的看一下字典(容器)的概念,不然理解会很困难。
y_ch_list = cfgdict['y']
ch_used = x_ch_list + y_ch_list   #列表的连接

for (bkey, bvalue) in input:
    fkey = io.BytesIO(bkey)
    fvalue = io.BytesIO(bvalue)
    keyInput = typedbytes.Input(fkey)
    valueInput = typedbytes.Input(fvalue)
    key = keyInput.read()     #这儿的key才是经过处理后等同于fft中输出的key的那个key,此处有bug
    m = p.search(key)
    if int(m.group(1)) not in cfgdict['train_cond']:continue
    if int(m.group(2)) not in ch_used:continue    #判断该key有没有。师兄的文件命名形式是:工况_通道.raw
    value = valueInput.read()   #师兄说这儿的value才是他经过处理后等同于fft中输出的value的那个value,说此处有bug
    xlen = len(value)
    for hz in xrange(low,high):
        outkey = hz
        outvalue = (m.group(1), m.group(2), value[hz*xlen/fc])    #因为师兄做的是rfft即是实数的fft,而实数的fft变换有实部偶对称,虚部奇对称的特点。故而使得fc=fs/2。其中fs是王勋师兄直接给的史师兄。
        output.write((outkey,outvalue))  #output以序列流的形式输出?     输出的key:hz    value:(mode,channel,fft_val)=(n,m,fft_value)
0 0