2015-06-19 34 views
5

Tôi đã cài đặt Spark trên máy Windows và muốn sử dụng nó qua Spyder. Sau một số khắc phục sự cố, các khái niệm cơ bản dường như hoạt động:Kết nối từ Spark/pyspark đến PostgreSQL

import os 

os.environ["SPARK_HOME"] = "D:\Analytics\Spark\spark-1.4.0-bin-hadoop2.6" 

from pyspark import SparkContext, SparkConf 
from pyspark.sql import SQLContext 

spark_config = SparkConf().setMaster("local[8]") 
sc = SparkContext(conf=spark_config) 
sqlContext = SQLContext(sc) 

textFile = sc.textFile("D:\\Analytics\\Spark\\spark-1.4.0-bin-hadoop2.6\\README.md") 
textFile.count() 
textFile.filter(lambda line: "Spark" in line).count() 

sc.stop() 

Điều này chạy như mong đợi. Bây giờ tôi muốn kết nối với một cơ sở dữ liệu Postgres9.3 đang chạy trên cùng một máy chủ. Tôi đã tải xuống trình điều khiển JDBC từ đây here và đã đặt nó trong thư mục D: \ Analytics \ Spark \ spark_jars. sau đó tôi đã tạo một tệp D mới: \ Analytics \ Spark \ spark-1.4.0-bin-hadoop2.6 \ conf \ spark-defaults.conf chứa dòng này:

spark.driver.extraClassPath  'D:\\Analytics\\Spark\\spark_jars\\postgresql-9.3-1103.jdbc41.jar' 

Tôi đã chạy sau mã để kiểm tra kết nối

import os 

os.environ["SPARK_HOME"] = "D:\Analytics\Spark\spark-1.4.0-bin-hadoop2.6" 

from pyspark import SparkContext, SparkConf 
from pyspark.sql import SQLContext 

spark_config = SparkConf().setMaster("local[8]") 
sc = SparkContext(conf=spark_config) 
sqlContext = SQLContext(sc) 

df = (sqlContext 
    .load(source="jdbc", 
      url="jdbc:postgresql://[hostname]/[database]?user=[username]&password=[password]", 
      dbtable="pubs") 
) 
sc.stop() 

Nhưng đang nhận được lỗi sau:

Py4JJavaError: An error occurred while calling o22.load. 
: java.sql.SQLException: No suitable driver found for  jdbc:postgresql://uklonana01/stonegate?user=analytics&password=pMOe8jyd 
at java.sql.DriverManager.getConnection(Unknown Source) 
at java.sql.DriverManager.getConnection(Unknown Source) 
at org.apache.spark.sql.jdbc.JDBCRDD$.resolveTable(JDBCRDD.scala:118) 
at org.apache.spark.sql.jdbc.JDBCRelation.<init>(JDBCRelation.scala:128) 
at org.apache.spark.sql.jdbc.DefaultSource.createRelation(JDBCRelation.scala:113) 
at org.apache.spark.sql.sources.ResolvedDataSource$.apply(ddl.scala:265) 
at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:114) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
at java.lang.reflect.Method.invoke(Unknown Source) 
at py4j.reflection.MethodInvoker.invoke(MethodInvoker.java:231) 
at py4j.reflection.ReflectionEngine.invoke(ReflectionEngine.java:379) 
at py4j.Gateway.invoke(Gateway.java:259) 
at py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:133) 
at py4j.commands.CallCommand.execute(CallCommand.java:79) 
at py4j.GatewayConnection.run(GatewayConnection.java:207) 
at java.lang.Thread.run(Unknown Source) 

Làm thế nào tôi có thể kiểm tra xem tôi đã tải file .jar đúng hay nơi nào khác các lỗi có thể đến từ đâu?

+0

Tôi đã thử postgresql-9.3-1103.jdbc41.jar và khá một vài file .jar khác. Tôi cũng đã thử thêm '# s.environ [" SPARK_CLASSPATH "] =" D: \\ Analytics \\ Spark \\ spark_jars \\ * "' nhưng điều này cho lỗi «Py4JJavaError: Đã xảy ra lỗi khi gọi None.org.apache .spark.api.java.JavaSparkContext. : org.apache.spark.SparkException: Đã tìm thấy cả spark.driver.extraClassPath và SPARK_CLASSPATH. Chỉ sử dụng tên cũ.' ngụ ý rằng phiên bản trên sẽ hoạt động. – phildeutsch

Trả lời

1

Remove spark-defaults.conf và thêm SPARK_CLASSPATH đối với môi trường hệ thống trong python như thế này:

os.environ["SPARK_CLASSPATH"] = 'PATH\\TO\\postgresql-9.3-1101.jdbc41.jar' 
1

Tôi đã cố gắng biến môi trường SPARK_CLASSPATH nhưng nó không làm việc với Spark 1.6.

Câu trả lời khác từ các bài đăng như dưới đây đề xuất thêm đối số lệnh pyspark và nó hoạt động.

Not able to connect to postgres using jdbc in pyspark shell

Apache Spark : JDBC connection not working

pyspark --conf spark.executor.extraClassPath=<jdbc.jar> --driver-class-path <jdbc.jar> --jars <jdbc.jar> --master <master-URL> 
Các vấn đề liên quan