2017-09-03 27 views
0

我有以下的测试代码:MySQL的阅读PySpark

from pyspark import SparkContext, SQLContext 
sc = SparkContext('local') 
sqlContext = SQLContext(sc) 
print('Created spark context!') 


if __name__ == '__main__': 
    df = sqlContext.read.format("jdbc").options(
     url="jdbc:mysql://localhost/mysql", 
     driver="com.mysql.jdbc.Driver", 
     dbtable="users", 
     user="user", 
     password="****", 
     properties={"driver": 'com.mysql.jdbc.Driver'} 
    ).load() 

    print(df) 

当我运行它,我得到以下错误:

java.lang.ClassNotFoundException: com.mysql.jdbc.Driver

在Scala中,这是由进口的.jar解决mysql-connector-java纳入该项目。

但是,在python中我没有关于如何告诉pyspark模块链接mysql连接器文件。

我已经看到了这解决了例子像

spark --package=mysql-connector-java testfile.py 

但我不希望这样,因为它迫使我以一种不可思议的方式运行我的脚本。我想要一个全部的python解决方案或者在某处复制一个文件,或者向Path中添加一些东西。

回答

1

创建时,您可以将参数传递给​​您sparkContextSparkConf之前被初始化:

import os 
from pyspark import SparkConf, SparkContext 

SUBMIT_ARGS = "--packages mysql:mysql-connector-java:5.1.39 pyspark-shell" 
os.environ["PYSPARK_SUBMIT_ARGS"] = SUBMIT_ARGS 
conf = SparkConf() 
sc = SparkContext(conf=conf) 

,或者你可以将它们添加到您的$SPARK_HOME/conf/spark-defaults.conf

+0

您好,我得到这个错误:'要求失败:提供的Maven坐标必须采用'groupId:artifactId:version'格式。提供的坐标是:mysql-connector-java',所以我猜这个参数有其他格式 –

+0

请用这个'mysql:mysql-connector-java:5.1.39'改变当前包然后它就起作用 –

+0

你是对,你也可以用'--jars path_to/mysql-connector-java.jar'作为jar来加载它,但是如果有的话它不会安装依赖关系。我会修改答案,以便它是正确的 – MaFF