【问题标题】:Read parquet files in Spark with pattern matching使用模式匹配在 Spark 中读取 parquet 文件
【发布时间】:2016-08-16 16:25:24
【问题描述】:

我正在运行 Spark 1.3.0,并希望根据模式匹配读取大量 parquet 文件。 parquet 文件基本上是 Hive DB 的基础文件,我只想读取一些文件(跨不同文件夹)。文件夹结构是

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]*}")

我想忽略元文件并仅加载日期文件夹中的镶木地板文件。这可能吗?

【问题讨论】:

    标签: apache-spark parquet


    【解决方案1】:

    您可以像这样在镶木地板中使用通配符(适用于 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/user/hive/warehouse/db/blogs/yymmdd=150204/ 或者 hdfs://myhost:8020/user/hive/warehouse/db/blogs/yymmdd=150204/part=01 并不是: hdfs://myhost:8020/user/hive/warehouse/db/blogs/yymmdd=150204/1

    因为您使用它的方式我认为您将在使用文件夹名称 (yymmdd) 作为分区时遇到麻烦,因为文件不在它的直接下方

    【讨论】:

      猜你喜欢
      • 2018-04-11
      • 1970-01-01
      • 2020-10-28
      • 2016-12-15
      • 2017-08-07
      • 1970-01-01
      • 2015-11-27
      • 2015-12-19
      • 2021-10-24
      相关资源
      最近更新 更多