Проверьте ниже код. Вы можете написать свой собственный запрос внутри переменной запроса. Для параллельной обработки или загрузки данных вы можете проверить наличие столбцов partitionColumn, lowerBound и upperBound.
val query = """
(select columnA,columnB from table_name
where <where conditions>) table
"""
val options = Map(
"url" -> "<url>".
"driver" -> "<driver class>".
"user" -> "<user>".
"password" -> "<password>".
"dbtable" -> query,
"partitionColumn" -> "",
"lowerBound" -> "<lower bound values>",
"upperBound" -> "<upper bound values>"
)
val df = spark
.read
.format("jdbc")
.options(options)
.load()