Я предполагаю, что вы хотите выбрать те строки, которые попадают в определенный диапазон дат и имеют значения столбца MOBILE_NUMBER
среди списка определенных номеров.
Сначала вы должны убедиться, что ваши данные в вашем ScalaКод и внутри фрейма данных находятся в одном формате, чтобы вы могли сравнить их правильно.Например:
val dateFrom = "2018-10-01 00:00:00"
val dateTo = "2018-11-05 23:59:59"
val mobileNumbers = Vector("7778529636", "745128598", "7777533575")
Обратите внимание, что я представляю номера мобильных телефонов в виде строк, поскольку вы можете получить неожиданные результаты для номеров с нулями в начале.Даты также являются строками.
Тогда запрос фильтра может выглядеть следующим образом:
import spark.implicits._ // for the $"something" syntax
spark.read.parquet("...")
.filter(
$"START_DATE".between(dateFrom, dateTo) && $"MOBILE_NUMBER".isin(mobileNumbers: _*)
)
В идеале даты должны быть в формате, который не допускает двусмысленности, например, числовая метка времени,потому что в противном случае недопустимые значения, такие как 2018-10-01 56:78:90
, могут нарушить сравнение, но в большинстве случаев это должно сработать, и, если это действительно необходимо, вы можете написать UDF, используя метод org.apache.spark.sql.functions.udf
, чтобы убедиться, что оно полностью корректно.