@Override @SuppressWarnings("unchecked") public List<InputSplit> getSplits(JobContext context) throws IOException { if (splits != null) { LOG.info("Returning cached splits: " + splits.size()); return splits; } splits = Lists.newArrayList(); TableScan scan = table.newScan(); //Apply Filters Expression filterExpression = (Expression) ObjectSerializer.deserialize(context.getConfiguration().get(ICEBERG_FILTER_EXPRESSION)); if (filterExpression != null) { LOG.info("Filter Expression: " + filterExpression); scan = scan.filter(filterExpression); } //Wrap in Splits try (CloseableIterable<CombinedScanTask> tasks = scan.planTasks()) { tasks.forEach((scanTask) -> splits.add(new IcebergSplit(scanTask))); } return splits; }