ich spark 1.3.0
bin mit dem mit CDH 5.4.0 vm
JDBC nicht in PySpark arbeitet
vorgesehen Ich versuche, das Code-Snippet für das Ausführen von Abfragen auf pyspark
über JDBC
Ich bin nicht in der Lage zu verbinden, mit einem von ihnen zu laufen:
1) pyspark --driver-class-path /usr/share/java/mysql-connector-java.jar
2) os.environ['SPARK_CLASSPATH'] = "usr/share/java/mysql-connector-java.jar"
In beiden Fällen, wenn ich diese Anweisung ausführen:
dept1 = sqlContext.load(source="jdbc", url="jdbc_url", dbtable="departments")
ich immer bin Fehler:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/spark/python/pyspark/sql/context.py", line 482, in load
df = self._ssql_ctx.load(source, joptions)
File "/usr/lib/spark/python/lib/py4j-0.8.2.1-src.zip/py4j/java_gateway.py",
line 538, in __call__
File "/usr/lib/spark/python/lib/py4j-0.8.2.1-src.zip/py4j/protocol.py",
line 300, in get_return_value
py4j.protocol.Py4JJavaError: An error occurred while calling o25.load.
: java.lang.StringIndexOutOfBoundsException: String index out of range: 10
at java.lang.String.substring(String.java:1907)
at org.apache.spark.sql.jdbc.DriverQuirks$.get(DriverQuirks.scala:52)
at org.apache.spark.sql.jdbc.JDBCRDD$.resolveTable(JDBCRDD.scala:93)
at org.apache.spark.sql.jdbc.JDBCRelation.<init>(JDBCRelation.scala:125)
at org.apache.spark.sql.jdbc.DefaultSource.createRelation(JDBCRelation.scala:114)
at org.apache.spark.sql.sources.ResolvedDataSource$.apply(ddl.scala:290)
at org.apache.spark.sql.SQLContext.load(SQLContext.scala:679)
at org.apache.spark.sql.SQLContext.load(SQLContext.scala:667)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
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(Thread.java:745)
Was die tatsächliche JDBC-URL Sie verwenden, ist in der gleichen Region durchgeführt werden müssen –
jdbc_url =." Jdbc: mysql: //quickstart.cloudera : 3306/retail_db? Benutzer = retail_dba & passwort = cloudera " – AJm