我在使用spark:
编写的hdfs上有以下分区镶木地板数据year
|---Month
|----monthlydata.parquet
|----Day
|---dailydata.parquet
现在,当我从年份路径读取df时,spark阅读dailydata.parquet。我如何从所有分区读取每月数据。我尝试使用设置选项mergeSchema = true,这会产生错误。
答案 0 :(得分:1)
我会敦促你停止做以下事情:
year
|---Month
|----monthlydata.parquet
|----Day
|---dailydata.parquet
当您从year/month/
或甚至只是year/
阅读时,您不会获得monthlydata.parquet
,您也将获得dailydata.parquet
。我无法说出你所得到的错误(请发布),但我的拙见建议是将HDFS中的路径分开,因为你已经复制了数据:
dailies
|---year
|---Month
|----Day
|---dailydata.parquet
monthlies
|---year
|---Month
|----monthlydata.parquet
是否有理由将它们保存在同一目录中?
但是,如果您坚持使用此结构,请使用以下内容:
schema = "dailydata1"
val dfList = dates.map { case (month, day) =>
Try(sqlContext.read.parquet(s"/hdfs/table/month=$month/day=$day/$schema.parquet"))
}
val dfUnion = dfList.collect { case Success(v) => v }.reduce { (a, b) =>
a.unionAll(b)
}
您可以在schema
,dailydata1
等之间切换dailydata2
。