Пока я пытался создать раздел в столбце «Дата», создается несколько файлов, что снижает производительность чтения, поскольку их много. небольшие файлы.
Поэтому я использовал repartition(1) для создания только одного файла.
Теперь запрос, используемый для этого файла с использованием Spark sql, - это дата запрос диапазона, например дата, между x и y.
Код: Выделить всё
public DataFilter applyValuationDateRangeFilter() {
AlcyoneDate startDate = calculationContext.getDateSequence().getStartDate();
AlcyoneDate endDate = calculationContext.getDateSequence().getEndDate();
filterQueries.append(" AND ");
filterQueries.append("ValuationDate BETWEEN '").append(startDate).append("' AND '").append(endDate).append("'");
return this;
}
Как повысить производительность чтения?< /p>
Я применяю фильтр во время загрузки файла:
Код: Выделить всё
public Dataset getDatasetForInputFileWithFiltering(String parquetFilePath, String filterQuery) {
return getSparkSession().read().format("parquet")
.option("inferSchema", "true")
.option("header", "true")
.load(parquetFilePath)
.filter(filterQuery);
}
Код: Выделить всё
Iterator rowIterator = rows.toLocalIterator();
while (rowIterator.hasNext()) {
Row row = rowIterator.next();
Также я не могу использовать rows.foreach и rows.foreachPartition, поскольку мой нижестоящий код не поддерживается многопоточность.
Подробнее здесь: https://stackoverflow.com/questions/789 ... timization