@Override public Filter[] pushFilters(Filter[] filters) { Filter[] supported = Arrays.stream(filters).filter(f -> { if (f instanceof GreaterThan) { GreaterThan gt = (GreaterThan) f; return gt.attribute().equals("i") && gt.value() instanceof Integer; } else { return false; } }).toArray(Filter[]::new); Filter[] unsupported = Arrays.stream(filters).filter(f -> { if (f instanceof GreaterThan) { GreaterThan gt = (GreaterThan) f; return !gt.attribute().equals("i") || !(gt.value() instanceof Integer); } else { return true; } }).toArray(Filter[]::new); this.filters = supported; return unsupported; }
@Override public Filter[] pushFilters(Filter[] filters) { Filter[] supported = Arrays.stream(filters).filter(f -> { if (f instanceof GreaterThan) { GreaterThan gt = (GreaterThan) f; return gt.attribute().equals("i") && gt.value() instanceof Integer; } else { return false; } }).toArray(Filter[]::new); Filter[] unsupported = Arrays.stream(filters).filter(f -> { if (f instanceof GreaterThan) { GreaterThan gt = (GreaterThan) f; return !gt.attribute().equals("i") || !(gt.value() instanceof Integer); } else { return true; } }).toArray(Filter[]::new); this.filters = supported; return unsupported; }
@Override public List<InputPartition<InternalRow>> planInputPartitions() { List<InputPartition<InternalRow>> res = new ArrayList<>(); Integer lowerBound = null; for (Filter filter : filters) { if (filter instanceof GreaterThan) { GreaterThan f = (GreaterThan) filter; if ("i".equals(f.attribute()) && f.value() instanceof Integer) { lowerBound = (Integer) f.value(); break; } } } if (lowerBound == null) { res.add(new JavaAdvancedInputPartition(0, 5, requiredSchema)); res.add(new JavaAdvancedInputPartition(5, 10, requiredSchema)); } else if (lowerBound < 4) { res.add(new JavaAdvancedInputPartition(lowerBound + 1, 5, requiredSchema)); res.add(new JavaAdvancedInputPartition(5, 10, requiredSchema)); } else if (lowerBound < 9) { res.add(new JavaAdvancedInputPartition(lowerBound + 1, 10, requiredSchema)); } return res; } }
@Override public List<InputPartition<InternalRow>> planInputPartitions() { List<InputPartition<InternalRow>> res = new ArrayList<>(); Integer lowerBound = null; for (Filter filter : filters) { if (filter instanceof GreaterThan) { GreaterThan f = (GreaterThan) filter; if ("i".equals(f.attribute()) && f.value() instanceof Integer) { lowerBound = (Integer) f.value(); break; } } } if (lowerBound == null) { res.add(new JavaAdvancedInputPartition(0, 5, requiredSchema)); res.add(new JavaAdvancedInputPartition(5, 10, requiredSchema)); } else if (lowerBound < 4) { res.add(new JavaAdvancedInputPartition(lowerBound + 1, 5, requiredSchema)); res.add(new JavaAdvancedInputPartition(5, 10, requiredSchema)); } else if (lowerBound < 9) { res.add(new JavaAdvancedInputPartition(lowerBound + 1, 10, requiredSchema)); } return res; } }
} else if (filter instanceof GreaterThan) { final GreaterThan greaterThan = (GreaterThan) filter; final Predicate<?> isMoreThan = new IsMoreThan((Comparable<?>) greaterThan.value(), false); final Set<String> relevantGroups = getGroupsFromFilter(filter); if (null != relevantGroups) {
return greaterThan(gt.attribute(), convertLiteral(gt.value()));