Requête de table de la RUCHE dans pyspark
Je suis en utilisant CDH5.5
J'ai un tableau créé dans la RUCHE par défaut de la base de données et de mesure de la requête de la RUCHE de commande.
Sortie
hive> use default;
OK
Time taken: 0.582 seconds
hive> show tables;
OK
bank
Time taken: 0.341 seconds, Fetched: 1 row(s)
hive> select count(*) from bank;
OK
542
Time taken: 64.961 seconds, Fetched: 1 row(s)
Cependant, je suis incapable d'interroger la table de pyspark comme il ne peut pas reconnaître la table.
from pyspark.context import SparkContext
from pyspark.sql import HiveContext
sqlContext = HiveContext(sc)
sqlContext.sql("use default")
DataFrame[result: string]
sqlContext.sql("show tables").show()
+---------+-----------+
|tableName|isTemporary|
+---------+-----------+
+---------+-----------+
sqlContext.sql("FROM bank SELECT count(*)")
16/03/16 20:12:13 INFO parse.ParseDriver: Parsing command: FROM bank SELECT count(*)
16/03/16 20:12:13 INFO parse.ParseDriver: Parse Completed
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/spark/python/pyspark/sql/context.py", line 552, in sql
return DataFrame(self._ssql_ctx.sql(sqlQuery), self)
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/pyspark/sql/utils.py", line 40, in deco
raise AnalysisException(s.split(': ', 1)[1])
**pyspark.sql.utils.AnalysisException: no such table bank; line 1 pos 5**
Nouvelle Erreur
>>> from pyspark.sql import HiveContext
>>> hive_context = HiveContext(sc)
>>> bank = hive_context.table("default.bank")
16/03/22 18:33:30 INFO DataNucleus.Persistence: Property datanucleus.cache.level2 unknown - will be ignored
16/03/22 18:33:30 INFO DataNucleus.Persistence: Property hive.metastore.integral.jdo.pushdown unknown - will be ignored
16/03/22 18:33:44 INFO DataNucleus.Datastore: The class "org.apache.hadoop.hive.metastore.model.MFieldSchema" is tagged as "embedded-only" so does not have its own datastore table.
16/03/22 18:33:44 INFO DataNucleus.Datastore: The class "org.apache.hadoop.hive.metastore.model.MOrder" is tagged as "embedded-only" so does not have its own datastore table.
16/03/22 18:33:48 INFO DataNucleus.Datastore: The class "org.apache.hadoop.hive.metastore.model.MFieldSchema" is tagged as "embedded-only" so does not have its own datastore table.
16/03/22 18:33:48 INFO DataNucleus.Datastore: The class "org.apache.hadoop.hive.metastore.model.MOrder" is tagged as "embedded-only" so does not have its own datastore table.
16/03/22 18:33:50 INFO DataNucleus.Datastore: The class "org.apache.hadoop.hive.metastore.model.MResourceUri" is tagged as "embedded-only" so does not have its own datastore table.
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/spark/python/pyspark/sql/context.py", line 565, in table
return DataFrame(self._ssql_ctx.table(tableName), self)
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/pyspark/sql/utils.py", line 36, in deco
return f(*a, **kw)
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 o22.table.
: org.apache.spark.sql.catalyst.analysis.NoSuchTableException
at org.apache.spark.sql.hive.client.ClientInterface$$anonfun$getTable$1.apply(ClientInterface.scala:123)
at org.apache.spark.sql.hive.client.ClientInterface$$anonfun$getTable$1.apply(ClientInterface.scala:123)
at scala.Option.getOrElse(Option.scala:120)
at org.apache.spark.sql.hive.client.ClientInterface$class.getTable(ClientInterface.scala:123)
at org.apache.spark.sql.hive.client.ClientWrapper.getTable(ClientWrapper.scala:60)
at org.apache.spark.sql.hive.HiveMetastoreCatalog.lookupRelation(HiveMetastoreCatalog.scala:406)
at org.apache.spark.sql.hive.HiveContext$$anon$1.org$apache$spark$sql$catalyst$analysis$OverrideCatalog$$super$lookupRelation(HiveContext.scala:422)
at org.apache.spark.sql.catalyst.analysis.OverrideCatalog$$anonfun$lookupRelation$3.apply(Catalog.scala:203)
at org.apache.spark.sql.catalyst.analysis.OverrideCatalog$$anonfun$lookupRelation$3.apply(Catalog.scala:203)
at scala.Option.getOrElse(Option.scala:120)
at org.apache.spark.sql.catalyst.analysis.OverrideCatalog$class.lookupRelation(Catalog.scala:203)
at org.apache.spark.sql.hive.HiveContext$$anon$1.lookupRelation(HiveContext.scala:422)
at org.apache.spark.sql.SQLContext.table(SQLContext.scala:739)
at org.apache.spark.sql.SQLContext.table(SQLContext.scala:735)
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)
grâce
OriginalL'auteur Chn | 2016-03-17
Vous devez vous connecter pour publier un commentaire.
Nous ne pouvons pas nous passer de la table de la Ruche directement le nom de la Ruche contexte sql méthode, car il ne comprend pas la Ruche nom de la table. Une façon de lire la table de la Ruche dans pyspark shell est:
Pour exécuter le SQL sur la table de la ruche:
Tout d'abord, nous avons besoin de vous inscrire le bloc de données, nous obtenons à partir de la lecture de la table de la ruche.
Ensuite, nous pouvons exécuter la requête SQL.
banque = hive_context.tableau (la"banque") Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/usr/lib/spark/python/pyspark/sql/context.py" de ligne, 565, dans le tableau de retour DataFrame(de soi._ssql_ctx.tableau(nomtable), auto)File "/usr/lib/spark/python/lib/py4j-0.8.2.1-src.zip/py4j/java_gateway.py" de ligne, 538, dans appel File "/usr/lib/spark/python/pyspark/sql/utils.py", à la ligne 36, dans la déco de retour de f (*, **kw) File "/usr/lib/spark/python/lib/py4j-0.8.2.1-src.zip/py4j/protocol.py", ligne de 300, en get_return_value py4j.le protocole.Py4JJavaError: Une erreur s'est produite lors d'un appel o30.table.
J'ai édité la réponse à inclure le nom de base de données. Il devrait maintenant fonctionner.
salut Bijay697, j'obtiens l'erreur org.apache.spark.sql.catalyseur.de l'analyse.NoSuchTableException. J'ai mis à jour l'erreur dans mon premier post (en vertu de la nouvelle erreur). Est-il spécial config requises pour l'accès à la RUCHE Metastore?
Le message d'erreur signifie que la table n'est pas présente dans la Ruche. Pouvez-vous essayer de créer une table dans une autre base de données au lieu de la valeur par défaut dans une Ruche. Aussi, si vous présentez votre travail en mode cluster, vous pouvez avoir besoin pour passer hive-site.xml.
OriginalL'auteur bijay697
SparkSQL est expédié avec sa propre metastore (derby), de sorte qu'il peut fonctionner même si la ruche n'est pas installé sur le système.C'est le mode par défaut.
Dans la question ci-dessus, vous avez créé une table dans la ruche. Vous obtenez le
table not found
erreur car SparkSQL est à l'aide de son défaut metastore qui n'a pas de métadonnées de votre table de la ruche.Si vous voulez SparkSQL à l'utilisation de la ruche metastore au lieu et à l'accès de la ruche tables, puis vous devez ajouter
hive-site.xml
spark dossier conf.OriginalL'auteur sujit
À mon problème, cp hive-site.xml à votre $SPARK_HOME/conf, et le cp mysql-connect-java-*.pot à votre $SPARK_HOME/pots de, cette solution a résolu mon problème.
OriginalL'auteur Huang
Pas sûr, si ce n'est pas encore résolue, je vérifiais la pyspark noyau avec tite-Live intégration et c'est de cette façon que j'ai testé la ruche configuration
OriginalL'auteur Pramit
vous pouvez utiliser sqlCtx.sql. L'hive-site.xml doivent être copiés étincelle conf chemin.
my_dataframe = sqlCtx.sql("Select * from categories")
my_dataframe.show()
OriginalL'auteur Sagar Shah