我正在运行Spark 1.3.0并希望根据模式匹配读取大量的镶木地板文件。镶木地板文件基本上是Hive DB的底层文件,我只想读取一些文件(跨越不同的文件夹)。文件夹结构是
def clean(self):
cleaned_data = super(NewAccountForm, self).clean()
password = cleaned_data.get('password')
password_confirm = cleaned_data.get('password_confirm ')
if password and password_confirm:
if password != password_confirm:
raise forms.ValidationError("The two password fields must match.")
return cleaned_data
像
这样的东西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
我想忽略元文件并仅加载日期文件夹中的镶木地板文件。这可能吗?
答案 0 :(得分:0)
你可以在镶木地板上使用通配符,因此(1.5上的工作没有在1.3上测试):
val v1 = sqlContext.parquetFile("hdfs://myhost:8020/user/hive/warehouse/db/blogs/yymmdd*")
如果不起作用,你可以做的另一件事是使用带yymmdd分区的hive创建外部表,并使用以下方法从该表读取镶木地板:
val sqlContext = new org.apache.spark.sql.hive.HiveContext(sc)
sqlContext.sql("SELECT FROM ...")
你不能使用正则表达式。
我认为你的文件夹结构也有问题。它应该是 HDFS://为myhost:8020 /用户/蜂巢/仓库/分贝/博客/ YYMMDD = 150204 / 要么 HDFS://为myhost:8020 /用户/蜂巢/仓库/分贝/博客/ YYMMDD = 150204 /部分= 01 并不是: HDFS://为myhost:8020 /用户/蜂巢/仓库/分贝/博客/ YYMMDD =一分之一十五万零二百零四
因为他们使用它的方式我觉得使用文件夹名称(yymmdd)作为分区会有麻烦,因为文件不在它下面