Я все еще новичок в scala, у меня есть требование извлечь первый раздел из каждой таблицы в улье. Я извлек список таблиц в отдельный текстовый файл и создал в виде последовательности, я понятия не имею, как разобрать каждое последовательное значение в «show partitions test_hive_database».
scala> import scala.io.Source
import scala.io.Source
scala> val filename = "text_tables.txt"
filename: String = text_tables.txt
Sample file containing the table list:
TABLE_NAME_A101
TABLE_NAME_A102
TABLE_NAME_A103
TABLE_NAME_B101
TABLE_NAME_C101
scala> val linestable =
scala.io.Source.fromFile("text_tables.txt").getLines.toSeq
linestable: Seq[String] = Stream(TABLE_NAME_A101, ?)
Ниже приведен пример первого раздела из таблицы, и я соединил таблицу вместе со значением раздела.
scala> sql("show partitions test_hive_database.TABLE_NAME_A101").withColumn("new_column",concat(lit("TABLE_NAME_A101,"),'partition)).select("new_column").show(1,false)
+------------------------------------+
|new_column |
+------------------------------------+
|TABLE_NAME_A101,dta_ld_dt=2018-01-23|
+------------------------------------+
only showing top 1 row
Пытался понять
scala> for(e <- linestable) yield (sql("show partitions test_hive_database.$e").withColumn("new_column",concat(lit("$e , "),'partition)).select("new_column").show(1,false))
org.apache.spark.sql.catalyst.parser.ParseException:
extraneous input '$' expecting {'SELECT', 'FROM', 'ADD'
Ожидаемый результат
+------------------------------------+
|new_column |
+------------------------------------+
|TABLE_NAME_A101,dta_ld_dt=2018-01-23|
|TABLE_NAME_A102,dta_ld_dt=2018-02-28|
|TABLE_NAME_A103,dta_ld_dt=2018-03-31|
|TABLE_NAME_B101,dta_ld_dt=2018-04-30|
|TABLE_NAME_C101,dta_ld_dt=2019-01-30|
+------------------------------------+
Фактический результат:
Я получаю ошибку, и я не уверен, что этот подход правильный.
Как проанализировать значения из одного столбца из файла в spark sql (имя таблицы) и получить результат, добавленный в CSV-файл?