我必须从一个分区如下的表中读取 Dataframe -年、月、日和小时。
输入:
| 年份|月|日期|小时|
| - ------|- ------|- ------|- ------|
| 二○二三|十二|三十一|十八|
| 小行星2024|1个|1个|十个|
| 二○二三|十二|三十一|十四|
| 小行星2024|1个|1个|十四|
需要根据我的审计范围-开始和结束时间戳从表中过滤一个分区范围。
开始时间戳:2023年12月31日15:00:00(含)结束时间戳:2024年1月1日14:00:00(独家)
预期输出:
| 年份|月|日期|小时|
| - ------|- ------|- ------|- ------|
| 二○二三|十二|三十一|十八|
| 小行星2024|1个|1个|十个|
尝试如下:
尝试1:
val filteredDf = rawDF.where(($"year" >= startTimeLocal.getYear && $"month" >= startTimeLocal.getMonthValue && $"day" >= startTimeLocal.getDayOfMonth && $"hour" >= startTimeLocal.getHour) && ($"year" <= endTimeLocal.getYear && $"month" <= endTimeLocal.getMonthValue && $"day" <= endTimeLocal.getDayOfMonth && $"hour" < endTimeLocal.getHour))
此条件失败,因为将跳过第31天大于14的小时值。
尝试2:
val yearDf = rawDF.where($"year" >= startTimeLocal.getYear && $"year" <= endTimeLocal.getYear)
val monthDf = yearDf.where(($"year" === startTimeLocal.getYear && $"month" >= startTimeLocal.getMonthValue) || ($"year" === endTimeLocal.getYear && $"month" <= endTimeLocal.getMonthValue))
val dayDf = monthDf.where(($"day" >= startTimeLocal.getDayOfMonth && $"hour" >= startTimeLocal.getHour) || ($"day" <= endTimeLocal.getDayOfMonth && $"hour" < endTimeLocal.getHour))
尝试3:
val final4Df = rawDF.where(($"year" >= startTimeLocal.getYear && $"day" >= startTimeLocal.getDayOfMonth && $"hour" >= startTimeLocal.getHour && $"day" >= startTimeLocal.getDayOfMonth) || ($"year" <= endTimeLocal.getYear && $"month" <= endTimeLocal.getMonthValue && $"day" <= endTimeLocal.getDayOfMonth && $"hour" < endTimeLocal.getHour))
1条答案
按热度按时间sr4lhrrt1#
我认为您可以从包括年初和年末之间的所有数据开始,然后在粒度级别上进行筛选