38

如何读取条件为数据框的分区镶木地板,

这工作正常,

val dataframe = sqlContext.read.parquet("file:///home/msoproj/dev_data/dev_output/aln/partitions/data=jDD/year=2015/month=10/day=25/*")

分区用于day=1 to day=30是否可以读取类似(day = 5 to 6)or的内容day=5,day=6

val dataframe = sqlContext.read.parquet("file:///home/msoproj/dev_data/dev_output/aln/partitions/data=jDD/year=2015/month=10/day=??/*")

如果我把*它给我所有 30 天的数据,它太大了。

4

4 回答 4

97

sqlContext.read.parquet可以采用多条路径作为输入。如果您只想要day=5and day=6,您可以简单地添加两个路径,例如:

val dataframe = sqlContext
      .read.parquet("file:///your/path/data=jDD/year=2015/month=10/day=5/", 
                    "file:///your/path/data=jDD/year=2015/month=10/day=6/")

如果你有文件夹day=X,比如说country=XXcountry会自动作为一列添加到dataframe

编辑:从 Spark 1.6 开始,需要提供一个“基本路径”选项,以便 Spark 自动生成列。在 Spark 1.6.x 中,必须像这样重写上面的内容,以创建一个包含“data”、“year”、“month”和“day”列的数据框:

val dataframe = sqlContext
     .read
     .option("basePath", "file:///your/path/")
     .parquet("file:///your/path/data=jDD/year=2015/month=10/day=5/", 
                    "file:///your/path/data=jDD/year=2015/month=10/day=6/")
于 2015-11-11T17:45:00.300 回答
42

例如,如果您想阅读多天,day = 5并且day = 6想在路径本身中提及范围,则可以使用通配符:

val dataframe = sqlContext
  .read
  .parquet("file:///your/path/data=jDD/year=2015/month=10/day={5,6}/*")

通配符也可用于指定日期范围:

val dataframe = sqlContext
  .read
  .parquet("file:///your/path/data=jDD/year=2015/month=10/day=[5-10]/*")

这匹配从 5 到 10 的所有日期。

于 2018-03-18T05:16:42.710 回答
8

您需要提供mergeSchema = true选项。如下所述(这是从 1.6.0 开始的):

val dataframe = sqlContext.read.option("mergeSchema", "true").parquet("file:///your/path/data=jDD")

这会将所有镶木地板文件读入数据框,并在数据框数据中创建年、月和日列。

参考:https ://spark.apache.org/docs/1.6.0/sql-programming-guide.html#schema-merging

于 2016-09-01T00:02:40.690 回答
0

就我的 pyspark 而言:

sdf_table = spark.read.parquet("s3://bucket/table/**/*.parquet")

** 是 parquet 的所有分区(一个 glob 表达式)

请注意,读取存储桶 "table/" 中的所有文件 parquet ,因此请对其他文件保持警告

于 2021-09-22T19:54:40.127 回答