我有一个用例,在聚合(使用map reduce)之后,将生成一个csv文件。现在,我想将这个驻留在hdfs上的csv文件直接导入mysql数据库。
这是我写的代码:-在#!/usr/bin/python
import subprocess
import sys
import csv
import MySQLdb
mydb = MySQLdb.connect(host='localhost',
user='root',
passwd='',
db='test')
cursor = mydb.cursor()
def main():
#csv_data = csv.reader(file(path/to/local/testcsv.csv))
csv_data = subprocess.Popen(["hadoop", "fs", "-cat", 'path/to/hdfs/testcsv.csv'], stdout=subprocess.PIPE)
#for row in csv_data
for row in csv_data.stdout:
print row
cursor.execute('INSERT INTO testcsv(names, \
classes, mark )' \
'VALUES("%s", "%s", "%s")',
row)
mydb.commit()
mydb.close()
if __name__ == "__main__":
main()
#close the connection to the database.
print "Done"
在测试csv.csv包含三个字段名、类和标记。我在mysql中创建了testcsv表,并尝试使用oozie工作流导入。当从本地文件系统而不是hdfs导入csv时,我的oozie工作流运行良好(在注释行中显示)。
运行此代码不会将数据导入mysql。我是不是犯了什么错误?