2016-02-05 67 views
2

我要救我的加工RDD到MySQL表,我使用SparkDataFrame但我得到follwing错误无法MySQLdb的通过蟒蛇火花连接

py4j.protocol.Py4JJavaError: An error occurred while calling o216.jdbc. 
: java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost:3306/student?user=root&password=root. 

我添加的mysql-罐子sparkshell

spark-shell --driver-class-path /path-to-mysql-jar/mysql-connectorjava-5.1.38-bin.jar。

from pyspark import SparkContext 
    from datetime import datetime 
    import os 
    import sys 
    from pyspark.sql import SQLContext, Row 
    sqlContext = SQLContext(sc) 
    file1 = sc.textFile("/home/hadoop/text1").cache() 
    file2 = sc.textFile("/home/hadoop/text2").cache() 
    file3 = file1.union(file2).coalesce(1).map(lambda line: line.split(',')) 
    file1.unpersist() 
    file2.unpersist() 
    result = file3.map(lambda x: (x[0]+', '+x[1],float(x[2]))).reduceByKey(lambda a,b:a+b).sortByKey('true').coalesce(1) 
    result = result.map(lambda x:x[0]+','+str(x[1]))\ 
    schema_site = sqlContext.createDataFrame(result) 
    schema_site.registerTempTable("table1") 
    mysql_url="jdbc:mysql://localhost:3306/test?user=root&password=root&driver=com.mysql.jdbc.Driver" 
    schema_site.write.jdbc(url=mysql_url, table="table1", mode="append") 

我使用的火花火花1.5.0彬hadoop2.4

还设置蜂巢metastore。

那么我怎么能加载我的RDD结果到Mysql表中。

输入文件

file1 contents are 

    1234567 65656545 12 

    1234567 65675859 11 

    file2 contents are, 

    1234567 65656545 12 

    1234567 65675859 11 

and the resultnat RDD is like 

1234567 65656545 24 

1234567 65675859 22 

i created the table in mysql with three colunm, 

std_id std_code std_res 

,我想表输出一样,

std_id std_code std_res 

    1234567 65656545 24 

    1234567 65675859 24 
+0

类似的问题:http://stackoverflow.com/a/31478590/2308683 –

回答

1

当传递JDBC驱动程序或其他Java依赖于你的星火计划,你应该使用--jars论据。

--jars                  逗号分隔的地方罐子的清单,包括司机和执行类路径。

2

加入--jar /路径/到/ mysql /下连接器的火花像提交解决它,

./bin/spark-submit --jars lib/mysql-connector-java-5.1.38-bin.jar sample.py 
这里
+0

任何想法如何在PyCharm中做到这一点? –

+0

过程相同只需创建.py脚本并指定路径即可 –