我是Python的新手,试图从hadoop流式读取数据。
这是我的python代码,var_list = get_config()
工作正常。
if __name__ == "__main__":
var_list = get_config()
dat = pd.read_table(lines,delimiter=',',header=0)
#print (dat)
print (dat.dtypes)
#print (dat['var8'])
这是我传递的文件,第一行是标题。
$ cat data
client_id,var1,var2,var3,var4,var5,var6,var7,var8
121,1,2,3,4,5,6,7,8
112,1,2,3,4,5,6,7,8
102,1,2,3,4,5,6,7,8
121,1,2,3,4,5,6,7,8
125,8,7,6,5,4,3,2,1
当我尝试打印dat.dtypes时,这是输出。
$ cat part-00000
1 int64
102 int64
2 int64
3 int64
4 int64
5 int64
6 int64
7 int64
8 int64
client_id int64
dtype: object
dtype: object
var1 int64
var2 int64
var3 int64
var4 int64
var5 int64
var6 int64
var7 int64
var8 int64
我的问题是它没有正确读取数据,可能是什么问题?
我也尝试使用pd.read_csv
,当我使用pd.read_table
读取数据时,它给了我同样的问题。
我正在执行像这样的hadoop流媒体。
hadoop jar /opt/mapr/hadoop/hadoop-2.7.0/share/hadoop/tools/lib/hadoop-streaming-2.7.0-mapr-1602.jar -Dmapreduce.job.queuename=opsistg_q1 -Dmapreduce.map.java.opts=-Xmx40960m -Dmapreduce.map.memory.mb=25000 -Dyarn.app.mapreduce.am.resource.mb=25000 -Dmapreduce.task.timeout=180000000 -mapper "<local path>/config_mapper.py" -input "<hadoop location>/data"
答案 0 :(得分:1)
这是一个简单的代码。
#!/usr/bin/env python
import sys
for line in sys.stdin:
line = line.strip()
toks = line.split('\001' ,2)
ck=toks[0]+toks[1]
others=toks[2]
print '%s\t%s'%(ck, others)
从stdin获取数据,将其拆分并作为键(ck) - 值(其他)对发出。
#!/usr/bin/env python
import sys
for line in sys.stdin:
line = line.strip()
ck_others = line.split('\t') # parsing mapper o/p
ck = ck_others[0]
others = ck_others[1]
other_parsed = others.split('\001')
这解析映射器输出以及拆分值(others
)。