hadoop流媒体中的pd.read_csv问题

时间:2017-02-24 12:31:45

标签: python pandas hadoop streaming

我是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"

1 个答案:

答案 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)。