Передача списка, загруженного из текстового файла, в SQL-запрос в Spark SQL - PullRequest
0 голосов
/ 11 февраля 2019

Я прочитал учетные записи из текстового файла, который использует , в качестве разделителя:

val csv = spark.read.text("src/main/resources/in/insight/account_issues.txt")

//implicits
import spark.sqlContext.implicits._

val string_account = csv.map(_.getString(0)).collect.toList.toString()
//print(string_account)

val query = s"""(SELECT
               |    ACCOUNT_NUMBER,
               |    CASE WHEN STMT.CRF_TYPE='CREDIT' THEN STMT.AMOUNT_LCY
               |        ELSE NULL
               |    END as 'CreditAmount',
               |    CASE WHEN STMT.CRF_TYPE='DEBIT' THEN STMT.AMOUNT_LCY
               |        ELSE  NULL
               |    END as 'DebitAmount',
               |    STMT.BOOKING_DATE,
               |    STMT.VALUE_DATE,
               |    CRF_TYPE
               |FROM [InsightLanding].[dbo].[v_STMT_ENTRY] AS STMT
               |    LEFT JOIN [InsightWarehouse].[dbo].[v_Account] AS A ON a.AccountNum = STMT.ACCOUNT_NUMBER
               |
               |WHERE STMT.MIS_DATE='$BusinessDate'
               | AND STMT.ACCOUNT_NUMBER IN ($string_account) ) tmp """.stripMargin

val responseWithSelectedColumns = spark
  .read
  .format("jdbc")
  .option("url", url)
  .option("driver", driver)
  .option("dbtable", query)
  .load()

Я не могу получить работы вместо того, чтобы получить ошибку:

: 'List' is not a recognized built-in function name

Что не так смой код?

1 Ответ

0 голосов
/ 11 февраля 2019

Когда вы создаете string_account, вы используете toString() в списке.Это даст вам строку List(...), например:

scala> List(1,2,3).toString()
res0: String = List(1, 2, 3)

Вместо этого вы хотите использовать mkString(","):

scala> List(1,2,3).mkString(",")
res1: String = "1,2,3"

В этом случае это будет:

val string_account = csv.map(_.getString(0)).collect.toList.mkString(",")

Примечание: Вы можете легко добавить скобки в string_account вместо того, чтобы использовать их в запросе SQL, если требуется с mkString("(", ",", ")").

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