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?
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