Verwenden von Spark 1.6.1. Ich habe eine Reihe von Tabellen in einem MariaDb, die ich in pySpark DataFrame-Objekte konvertieren möchte. Aber createExternalTable() wirft. Zum Beispiel:PySpark createExternalTable() aus SQLContext
In [292]: tn = sql.tableNames()[10]
In [293]: df = sql.createExternalTable(tn)
/home/charles/spark-1.6.1/python/lib/py4j-0.9-src.zip/py4j/protocol.py in get_return_value(answer, gateway_client, target_id, name)
306 raise Py4JJavaError(
307 "An error occurred while calling {0}{1}{2}.\n".
--> 308 format(target_id, ".", name), value)
309 else:
310 raise Py4JError(
Py4JJavaError: An error occurred while calling o18.createExternalTable.
: java.lang.RuntimeException: Tables created with SQLContext must be TEMPORARY. Use a HiveContext instead.
at scala.sys.package$.error(package.scala:27)
at org.apache.spark.sql.execution.SparkStrategies$DDLStrategy$.apply(SparkStrategies.scala:379)
at org.apache.spark.sql.catalyst.planning.QueryPlanner$$anonfun$1.apply(QueryPlanner.scala:58)
at org.apache.spark.sql.catalyst.planning.QueryPlanner$$anonfun$1.apply(QueryPlanner.scala:58)
at scala.collection.Iterator$$anon$13.hasNext(Iterator.scala:371)
at org.apache.spark.sql.catalyst.planning.QueryPlanner.plan(QueryPlanner.scala:59)
at org.apache.spark.sql.execution.QueryExecution.sparkPlan$lzycompute(QueryExecution.scala:47)
at org.apache.spark.sql.execution.QueryExecution.sparkPlan(QueryExecution.scala:45)
at org.apache.spark.sql.execution.QueryExecution.executedPlan$lzycompute(QueryExecution.scala:52)
at org.apache.spark.sql.execution.QueryExecution.executedPlan(QueryExecution.scala:52)
at org.apache.spark.sql.execution.QueryExecution.toRdd$lzycompute(QueryExecution.scala:55)
at org.apache.spark.sql.execution.QueryExecution.toRdd(QueryExecution.scala:55)
at org.apache.spark.sql.SQLContext.createExternalTable(SQLContext.scala:695)
at org.apache.spark.sql.SQLContext.createExternalTable(SQLContext.scala:668)
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:381)
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:209)
at java.lang.Thread.run(Thread.java:745)
Das gleiche passiert, wenn ich Quelle = 'jdbc' angeben.
Die Tabelle existiert:
In [297]: sql.sql("SELECT * from {} LIMIT 5".format(tn)).show()
+--------------------+-----+-----+-----+----+------+------+------+----------------------+----+----+----+-----+
| Date| Open| High| Low|Last|Change|Settle|Volume|Prev_Day_Open_Interest|prod|exch|year|month|
+--------------------+-----+-----+-----+----+------+------+------+----------------------+----+----+----+-----+
|1999-10-29 00:00:...|245.0|245.0|245.0|null| null| 245.0| 1.0| 1.0| C| CME|2001| H|
|1999-11-01 00:00:...|245.0|245.0|245.0|null| null| 245.0| 0.0| 1.0| C| CME|2001| H|
|1999-11-02 00:00:...|245.0|245.0|245.0|null| null| 245.0| 0.0| 1.0| C| CME|2001| H|
|1999-11-03 00:00:...|245.0|245.5|245.0|null| null| 245.5| 5.0| 6.0| C| CME|2001| H|
|1999-11-04 00:00:...|245.5|245.5|245.5|null| null| 245.5| 0.0| 6.0| C| CME|2001| H|
+--------------------+-----+-----+-----+----+------+------+------+----------------------+----+----+----+-----+
Nach dem Fehler, sollte dies für HIVE Daten arbeiten. Ich benutze keinen HIVEContext, sondern einen SQLContext. Gemäß https://spark.apache.org/docs/latest/api/python/pyspark.sql.html wird dies für ver> = 1.3 unterstützt.
Gibt es eine Möglichkeit, einen DataFrame aus einer SqlTable zu extrahieren?
erklären konnte, was genau versuchen Sie zu erreichen? Es sieht so aus, als ob Sie bereits eine Tabelle mit diesem Namen registriert haben. Wo sind andere erforderliche Optionen? Die Art und Weise, wie Sie 'createExternalTable' verwenden, wäre nicht gültig, selbst wenn Sie keine Fehlermeldung sehen würden. – zero323
Eine Bibliothek registrierte die Tabellen für mich. Nun, da sie registriert sind, möchte ich sie direkt als pySpark DataFrames bearbeiten. –