Проблема с Spark 2.4 на EMR 5.20 в AWS.
У меня есть строковый столбец как раздел, в котором есть значения даты.Моя цель - сделать так, чтобы максимальное значение этого столбца упоминалось как фильтр.Значения выглядят следующим образом 2019-01-01
на 1 января 2019 года.
В этом запросе я пытаюсь отфильтровать до определенного значения даты (который является строковым типом данных), и Spark заканчивает чтение всех каталогов, а не только в результате max(value)
.
spark.sql("select mypartitioncolumn, column1, column2 from mydatabase.mytable where mypartitioncolumn= (select max(mypartitioncolumn) from myothertable) group by 1,2,3 ").show
Однако в этом случае, если я жестко закодирую значение, он только читает соответствующий каталог.
spark.sql("select mypartitioncolumn, column1, column2 from mydatabase.mytable where mypartitioncolumn= '2019-01-01' group by 1,2,3 ").show
Почему Spark не распознает оба метода одинаково?Я удостоверился, что если я выполню запрос select max(mypartitioncolumn) from myothertable
, он покажет то же значение, что и мой метод в жестком коде (а также тот же тип данных).
Я не могу найти в документации ничего, что отличало бы запросы к разделам от различий в типах данных.Я проверил, чтобы убедиться, что моя схема в исходной таблице и в качестве значения являются строковыми типами, а также попытался преобразовать мое значение в виде строки cast( (select max(mypartitioncolumn) from myothertable) as string)
, это не имеет никакого значения.