标签:
最近在学习spark分布式计算框架,其中遇到这样的问题
提交的命令是
bin/spark-submit --jars lib/mysql-connector-java-5.1.38-bin.jar --master spark://Wechat-6:7077 examples/hsbhadoop/demo.py
出错的语句是
df.write.jdbc(MYSQL_CONNECTION_URL, ‘Date_statistic‘, mode=‘append‘)
分析原因是在数据写入mysql的时候发生的错误, 至于为什么不清楚, 在apache上面找到一个类似的提问, 说是只在1.6.1上面出现, 无奈之下我下载了1.6.0, 果然不再出现问题.
然后又经过半天的优化, 代码有了一些变化, 突然想起来再回到1.6.1上面去跑一边看问题是不是继续存在, 这时发现问题不再出现了, 囧...
体内的洪荒之力一下子就控制不住了, 就不信了...
开始删代码, 得到一个最小的包含错误的代码片段(即多删除任意一行代码程序都不能运行,或者bug不出现, 当然能够确定不干扰的可以忽略)
sqlsc=SQLContext(sc)
dataframe_mysql = sqlsc.read.format("jdbc").options(
url = MYSQL_CONNECTION_URL,
dbtable = "`SystemEvents-"+date+"`",
driver = "com.mysql.jdbc.Driver").load()# 下面这行是没有问题的代码
# source = dataframe_mysql.select(‘Message‘).limit(1).map(lambda r: (‘com/asdfadsfad‘, ‘afafasdfasdfas‘))
#下面这行是有问题的代码
source = sc.parallelize([(‘com/asdfadsfad‘, ‘afafasdfasdfas‘)])
rdd = source.map(lambda r: (‘com/asdfadsfad‘, "2016-04-02", 1, 2, 3))
df = rdd.toDF([‘url‘, ‘time‘, ‘pv‘, ‘uv‘, ‘level‘])
df.write.jdbc(MYSQL_CONNECTION_URL, ‘Date_statistic‘, mode=‘append‘)
具体原因不明,但是区别已经能够看出来了, 只有从mysql.select返回的rdd后面进行toDF操作之后才可能正常进行写操作,否则就会造成错误, 但是同样的代码在1.6.0下面是正常的.
标签:
原文地址:http://www.cnblogs.com/bojoyzhou/p/5372082.html