2017-10-25 2 views
0

spark sql用のjdbcドライバはどこに/どこにインストールしますか? all-spark-notebookドッカーイメージを実行していて、SQLデータベースから直接sparkにいくつかのデータを取得しようとしています。PySparkの使用時にクラスパスにjdbcドライバを追加するには?

私は、私がClasspathにドライバを含める必要があると伝えることができますから、どうすればよいのか分かりません。pyspark?あなたは次の操作を行うことができますPostgreSQL用のドライバが含まために

from pyspark.sql import SparkSession 
spark = SparkSession \ 
    .builder \ 
    .master("local") \ 
    .appName("Python Spark SQL basic example") \ 
    .getOrCreate() 

jdbcDF = spark.read \ 
    .format("jdbc") \ 
    .option("url", "jdbc:postgresql:dbserver") \ 
    .option("dbtable", "jdbc:postgresql:dbserver") \ 
    .load() 

--------------------------------------------------------------------------- 
Py4JJavaError        Traceback (most recent call last) 
<ipython-input-2-f3b08ff6d117> in <module>() 
     2 spark = SparkSession  .builder  .master("local")  .appName("Python Spark SQL basic example")  .getOrCreate() 
     3 
----> 4 jdbcDF = spark.read  .format("jdbc")  .option("url", "jdbc:postgresql:dbserver")  .option("dbtable", "jdbc:postgresql:dbserver")  .load() 

/usr/local/spark/python/pyspark/sql/readwriter.py in load(self, path, format, schema, **options) 
    163    return self._df(self._jreader.load(self._spark._sc._jvm.PythonUtils.toSeq(path))) 
    164   else: 
--> 165    return self._df(self._jreader.load()) 
    166 
    167  @since(1.4) 

/usr/local/spark/python/lib/py4j-0.10.4-src.zip/py4j/java_gateway.py in __call__(self, *args) 
    1131   answer = self.gateway_client.send_command(command) 
    1132   return_value = get_return_value(
-> 1133    answer, self.gateway_client, self.target_id, self.name) 
    1134 
    1135   for temp_arg in temp_args: 

/usr/local/spark/python/pyspark/sql/utils.py in deco(*a, **kw) 
    61  def deco(*a, **kw): 
    62   try: 
---> 63    return f(*a, **kw) 
    64   except py4j.protocol.Py4JJavaError as e: 
    65    s = e.java_exception.toString() 

/usr/local/spark/python/lib/py4j-0.10.4-src.zip/py4j/protocol.py in get_return_value(answer, gateway_client, target_id, name) 
    317     raise Py4JJavaError(
    318      "An error occurred while calling {0}{1}{2}.\n". 
--> 319      format(target_id, ".", name), value) 
    320    else: 
    321     raise Py4JError(

Py4JJavaError: An error occurred while calling o36.load. 
: java.sql.SQLException: No suitable driver 
    at java.sql.DriverManager.getDriver(DriverManager.java:315) 
    at org.apache.spark.sql.execution.datasources.jdbc.JDBCOptions$$anonfun$7.apply(JDBCOptions.scala:84) 
    at org.apache.spark.sql.execution.datasources.jdbc.JDBCOptions$$anonfun$7.apply(JDBCOptions.scala:84) 
    at scala.Option.getOrElse(Option.scala:121) 
    at org.apache.spark.sql.execution.datasources.jdbc.JDBCOptions.<init>(JDBCOptions.scala:83) 
    at org.apache.spark.sql.execution.datasources.jdbc.JDBCOptions.<init>(JDBCOptions.scala:34) 
    at org.apache.spark.sql.execution.datasources.jdbc.JdbcRelationProvider.createRelation(JdbcRelationProvider.scala:32) 
    at org.apache.spark.sql.execution.datasources.DataSource.resolveRelation(DataSource.scala:306) 
    at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:178) 
    at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:146) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at py4j.reflection.MethodInvoker.invoke(MethodInvoker.java:244) 
    at py4j.reflection.ReflectionEngine.invoke(ReflectionEngine.java:357) 
    at py4j.Gateway.invoke(Gateway.java:280) 
    at py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:132) 
    at py4j.commands.CallCommand.execute(CallCommand.java:79) 
    at py4j.GatewayConnection.run(GatewayConnection.java:214) 
    at java.lang.Thread.run(Thread.java:748) 

答えて

0

:あなたはドッカーを使用しているので、今

conf = SparkConf() # create the configuration 
conf.set("spark.jars", "/path/to/postgresql-connector-java-someversion-bin.jar") # set the spark.jars 

... 
spark = SparkSession.builder \ 
     .config(conf=conf) \ # feed it to the session here 
     .master("local") \ 
     .appName("Python Spark SQL basic example") \ 
     .getOrCreate() 

は、私はあなたのドライバのjarを持つフォルダをマウントする必要がと思いますマウントされたフォルダを参照してください。 (例:How to mount host directory in docker container?

これは役立ちます、幸運!

編集は:diffferentの方法は、このような​​を使用するときに​​引数を与えることになります:

spark-submit --driver-class-path=path/to/postgresql-connector-java-someversion-bin.jar file_to_run.py

が、私は、これはあなたがこれを実行する方法ではありません推測しています。

関連する問題