2017-08-15 1 views
0

j'ai écrit ci-dessous le code scala pour créer parquet fichierImpossible de charger les données des fichiers de parquet Hive table externe

scala> case class Person(name:String,age:Int,sex:String) 
defined class Person 

scala> val data = Seq(Person("jack",25,"m"),Person("john",26,"m"),Person("anu",27,"f")) 
data: Seq[Person] = List(Person(jack,25,m), Person(john,26,m), Person(anu,27,f)) 

scala> import sqlContext.implicits._ 
import sqlContext.implicits._ 

scala> import org.apache.spark.sql.SaveMode 
import org.apache.spark.sql.SaveMode 

scala> df.select("name","age","sex").write.format("parquet").mode("overwrite").save("sparksqloutput/person") 

état HDFS:

[[email protected] ~]$ hadoop fs -ls sparksqloutput/person 
Found 4 items 
-rw-r--r-- 1 cloudera cloudera   0 2017-08-14 23:03 sparksqloutput/person/_SUCCESS 
-rw-r--r-- 1 cloudera cloudera  394 2017-08-14 23:03 sparksqloutput/person/_common_metadata 
-rw-r--r-- 1 cloudera cloudera  721 2017-08-14 23:03 sparksqloutput/person/_metadata 
-rw-r--r-- 1 cloudera cloudera  773 2017-08-14 23:03 sparksqloutput/person/part-r-00000-2dd2f334-1985-42d6-9dbf-16b0a51e53a8.gz.parquet 

J'ai créé une table de ruche externe à l'aide commande ci-dessous

hive> CREATE EXTERNAL TABLE person (name STRING,age INT,sex STRING) STORED AS PARQUET LOCATION '/sparksqlouput/person/'; 
OK 
Time taken: 0.174 seconds 
hive> select * from person 
    > ; 
OK 
Time taken: 0.125 seconds 

Mais lors de l'exécution ci-dessus, sélectionnez la requête aucune ligne retournée. Veuillez aider quelqu'un à ce sujet.

+0

l'instruction scala pour créer la dataframe df est manquante en question. Pouvez-vous louer l'ajouter? – Shubhangi

Répondre

1

En général, l'instruction hive sql 'select * from <table>' localise simplement le répertoire de la table où les données de table existent et vide le contenu du fichier à partir du répertoire hdfs.

Dans votre cas select * ne fonctionne pas, cela signifie que l'emplacement n'est pas correct.

S'il vous plaît noter, dans scala votre dernière déclaration contient save("sparksqloutput/person"), où "sparksqloutput/person" est le chemin relatif et il va étendre à "/user/<logged in username>/sparksqloutput/person" (à savoir "/user/cloudera/sparksqloutput/person").

Par conséquent, lors de la création de la table Hive, vous devez utiliser "/user/cloudera/sparksqloutput/person" au lieu de "/sparksqloutput/person". Pratiquement "/sparksqloutput/person" n'existe pas et par conséquent vous n'avez pas obtenu de sortie dans select * from person.