Как построить динамическую строку запроса для выполнения на кадре данных spark-sql 2.3.1? - PullRequest
0 голосов
/ 31 октября 2018

У меня есть требование получить условие where, переданное пользователем в качестве аргументов программы. Исходя из условия где мне нужно запросить базу данных источника.

Я использую spark-sql.2.3.1 Как построить и передать / выполнить динамически построенный запрос?

Пример запроса:

select ProductId, COUNT(*) AS ProductSaleCount
 from productsale
 where to_date(Date) >= "2015-12-17"
 and to_date(Date) <= "2015-12-31"
 group by ProductId

1 Ответ

0 голосов
/ 31 октября 2018

Все, что вам нужно сделать в вашем сценарии, это создать строку запроса, которая будет выглядеть примерно так:

val query = "select ProductId, COUNT(*) AS ProductSaleCount from productsale where to_date(Date) >= "+ fromDate +" and to_date(Date) <= " + toDate + " group by ProductId"

fromDate и toDate, вы, возможно, получите от своих аргументов.

Чтобы использовать это, однако это другая проблема, и это зависит от вашей базы данных

Для улья вы можете просто зарегистрировать свой сеанс искры с помощью enableHiveSupport

val spark = SparkSession.builder().appName("My App").enableHiveSupport().config("spark.sql.warehouse.dir", warehouseLocation).getOrCreate()

val data = spark.sqlContext.sql(query)

Если данные находятся в фрейме данных, и вы хотите запросить это, вам нужно будет создать представление, а затем выполнить запрос для этого

finalDataFrame.createOrReplaceTempView("productsale")

val data = spark.sqlContext.sql(query)

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...