我想将我已处理的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
答案 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列表,包含在驱动程序和执行程序类路径中。