2016-08-16 67 views
0

我正在運行Spark 1.3.0,並且想要根據模式匹配讀取一些實地標文件。 parquet文件基本上是Hive DB的底層文件,我只想讀取一些文件(跨不同文件夾)。文件夾結構是使用模式匹配在Spark中讀取實驗文件

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 

喜歡的東西

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

我想忽略元文件並加載日期的文件夾裏面只有實木複合地板的文件。這可能嗎?

回答

0

您可以在地板使用通配符,像這樣(適用於1.5對1.3沒有測試):

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

另一件事,你可以在不工作的情況下做的就是創建使用蜂巢外部表與YYMMDD分區,並使用該表中讀取實木複合地板:

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

你不能使用正則表達式。

也我認爲你的文件夾結構是有問題的。它應該是 hdfs:// myhost:8020/user/hive/warehouse/db/blogs/yymmdd = 150204/ 或 hdfs:// myhost:8020/user/hive/warehouse/db/blogs/yymmdd = 150204 /部分= 01 而不是: HDFS://爲myhost:8020 /用戶/蜂巢/倉儲/ DB /博客/ YYMMDD =一分之十五萬零二百零四

,因爲他們的方式使用它,我認爲你將不得不使用的煩惱文件夾名稱(yymmdd)作爲分區,因爲文件不直接在其下面