使用 Python 编写 Storm 程序,无法将结果写入 MySQL

2016-05-10 15:27:28 +08:00
 yurang

我使用 Python 作为编程语言写一个关联关系挖掘的程序部署在 Storm 集群,将 jar 包提交到集群后无法将结果写入数据库,也无法生成 log 文件,贴上写入结果的 bolt 代码,希望大家帮忙看看,不胜感激:

#coding=utf-8
import MySQLdb
import logging
from pyleus.storm import SimpleBolt
 
log = logging.getLogger('log_results')
 
def write_result(freqset,count):#将结果写入数据库
    conn = MySQLdb.connect(host='10.1.1.5',user='root',passwd='',db='datamining',port=3306)
    cur = conn.cursor()
    st = ''
    for i in freqset:#转换成字符串
        st = st + i + ','
    sql = "select * from result where freqset = " + "'"+ st +"'"#查询是否已经在数据库中存在
    cur.execute(sql)
    returned_value = cur.fetchone()
    if returned_value != None:#如果在则更新计数值
        supnum = returned_value[1]+count
        sql1 = "update result set supnum = %s where freqset = '%s';" %(str(supnum),st)
        cur.execute(sql1)
        conn.commit
    else:#不在则插入数据
        value = [st,count]
        sql2 = 'insert into result values(%s,%s)'
        cur.execute(sql2,value)
        conn.commit()
         
    cur.close()
    conn.close()
 
 
class LogResultsBolt(SimpleBolt):
 
    def process_tuple(self, tup):#接收上游频繁集,及其计数值
        freqset, count = tup.values
        log.debug("%s: %d", freqset, count)#写入 log 中
        write_result(freqset, count)
 
if __name__ == '__main__':
    logging.basicConfig(
        level=logging.DEBUG,
        filename='/tmp/results.log',
        format="%(message)s",
        filemode='a',
    )
 
    LogResultsBolt().run()
2774 次点击
所在节点    Python
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/277625

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX