2016-08-16 4 views
0

Ich habe Spark 1.3.0 und möchte eine Reihe von Parkett-Dateien basierend auf Mustervergleich lesen. Die Parkett-Dateien sind im Grunde die zugrunde liegenden Dateien einer Hive-DB und ich möchte nur einige der Dateien (über verschiedene Ordner) lesen. Die Ordnerstruktur istLesen Sie Parkett-Dateien in Spark mit passendem Muster

hdfs://myhost:8020/user/hive/warehouse/db/blogs/some/meta/files/ 
hdfs://myhost:8020/user/hive/warehouse/db/blogs/yymmdd=20160101/01/file1.parq   
hdfs://myhost:8020/user/hive/warehouse/db/blogs/yymmdd=20160101/02/file2.parq 
hdfs://myhost:8020/user/hive/warehouse/db/blogs/yymmdd=20160103/01/file3.parq 

So etwas wie

val v1 = sqlContext.parquetFile("hdfs://myhost:8020/user/hive/warehouse/db/blogs/yymmdd={[0-9]*}") 

ich die Meta-Dateien und laden nur die Parkett-Dateien in dem Ordner Datum ignoriert werden soll. Ist das möglich?

Antwort

0

können Sie Platzhalter in Parkett verwenden wie so (funktioniert auf 1,5 nicht auf 1.3 nicht getestet):

val v1 = sqlContext.parquetFile("hdfs://myhost:8020/user/hive/warehouse/db/blogs/yymmdd*") 

eine andere Sache, die Sie tun können, falls, der nicht funktioniert externe Tabelle erstellen hive mit mit Partition von yymmdd und lesen Sie Parkett aus dieser Tabelle mit:

val sqlContext = new org.apache.spark.sql.hive.HiveContext(sc) 
sqlContext.sql("SELECT FROM ...") 

Sie können nicht reguläre Ausdrücke verwenden.

auch ich denke, Sie Ordner Struktur ist problematisch. Es sollte sein hdfs: // myhost: 8020/Benutzer/Bienenstock/warehouse/db/blogs/yymmdd = 150204/ oder hdfs: // myhost: 8020/Benutzer/Bienenstock/warehouse/db/blogs/yymmdd = 150204/part = 01 und nicht: hdfs: // myhost: 8020/user/Nest/Lager/db/blogs/yymmdd = 150204/1

weil sie Sie es Art und Weise verwenden, ich glaube, Sie Probleme haben mit der Ordnernamen (yymmdd) als Partition, da die Dateien nicht direkt darunter liegen

Verwandte Themen