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