我在s3中有以下格式的目录,
<base-directory>/users/users=20180303/hour=0/<parquet files>
<base-directory>/users/users=20180303/hour=1/<parquet files>
....
<base-directory>/users/users=20180302/hour=<0 to 23>/<parquet files>
<base-directory>/users/users=20180301/hour=<0 to 23>/<parquet files>
....
<base-directory>/users/users=20180228/hour=<0 to 23>/<parquet files>
基本上我在每日目录中都有每小时的子目录。
现在我想在过去30天内处理镶木地板文件。
我试过了,
val df = sqlContext.read.option("header", "true")
.parquet(<base-directory> + File.separator + "users" + File.separator)
.where(col("users").between(startDate, endDate))
其中endDate和startDate以yyyymmdd格式分隔30天。
上述解决方案未提供正确的目录子集。我做错了什么?
答案 0 :(得分:0)
where
函数用于dataframe
中的过滤行。您正在使用它来读取 s3 中的parquet
个文件。 所以整个概念都错了。
相反,您可以在startDate和endDate 之间创建一个路径数组,并将其传递给 sqlContext read api 。
以编程方式发言,您可以执行以下操作(它们只是伪代码)
val listBuffer = new ListBuffer[String]
for(date <- startDate to endDate)
listBuffer.append(<base-directory> + File.separator + "users" + File.separator+"users="+date)
val df = sqlContext.read.option("header", "true").parquet(listBuffer: _*)