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

У меня есть такой код с многострочным запросом

  val hiveInsertIntoTable = spark.read.text(fileQuery).collect()
  hiveInsertIntoTable.foreach(println)

  val actualQuery = hiveInsertIntoTable(0).mkString
  println(actualQuery)


  spark.sql(s"truncate table $tableTruncate")
  spark.sql(actualQuery)

Всякий раз, когда я пытаюсь выполнить фактический запрос, я получаю сообщение об ошибке.

org.apache.spark.sql.catalyst.parser.ParseException:
no viable alternative at input '<EOF>'(line 1, pos 52)
== SQL ==
insert into wera_tacotv_esd.lac_asset_table_pb_hive

---------------------------------------------------- ^^^

and the end of the query  .... ;    (terminates in a ;)

На самом деле запрос состоит из 450 строк

Я пытался заключить переменную в тройные кавычки, но это тоже не сработало.

Любая помощь приветствуется.

Я использую spark 2.1 и scala 2.11

1 Ответ

0 голосов
/ 23 мая 2018

Три задачи:

  • hiveInsertIntoTable - это Array[org.apache.spark.sql.Row] - не очень полезная структура.
  • Вы берете только первый ряд hiveInsertIntoTable(0)
  • Даже если вы взяли все строки, объединение с пустой строкой (.mkString) не сработало бы.

Либо:

val actualQuery = spark.read.text(path).as[String].collect.mkString("\n")

, либо

val actualQuery = spark.sparkContext.wholeTextFiles(path).values.first()
...