无法通过python spark连接MysqlDB

时间:2016-02-05 12:37:12

标签: python mysql apache-spark pyspark pyspark-sql

我想将我已处理的rdd保存到mysql表中,因为我使用的是SparkDataFrame但是我遇到了错误

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-jar添加到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")

我正在使用spark spark-1.5.0-bin-hadoop2.4

还设置了hive 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

2 个答案:

答案 0 :(得分:2)

通过将--jar / path /添加到/ mysql / connector来解决它,如火花提交,

 ./bin/spark-submit --jars lib/mysql-connector-java-5.1.38-bin.jar sample.py

答案 1 :(得分:1)

将jdbc驱动程序或其他java依赖项传递给spark程序时,应使用--jars参数。

  

- jars以逗号分隔的本地jar列表,​​包含在驱动程序和执行程序类路径中。