Без какой-либо формы выполнения Spark не может определить столбцы. Например, если таблица была загружена из CSV-файла
spark.read.option("header",true).csv("data.csv").createOrReplaceTempView("csvTable")
, тогда запрос
select * from csvTable
не сможет прочитать имена столбцов без чтения (по крайней мере, в первой строке) файла csv.
Извлечение небольшого количества кода из команды объяснения Spark следующие строки максимально приближены к ответу на вопрос:
val logicalPlan: LogicalPlan = spark.sessionState.sqlParser.parsePlan("select * from csvTable")
val queryExecution: QueryExecution = spark.sessionState.executePlan(logicalPlan)
val outputAttr: Seq[Attribute] = queryExecution.sparkPlan.output
val colNames: Seq[String] = outputAttr.map(a => a.name)
println(colNames)
Если файл data.csv
содержит столбцы a
и b
, код печатает
List(a, b)
Отказ от ответственности : QueryExecution не считается общедоступным c классом, который может использоваться разработчиками приложений. На данный момент (Spark версия 2.4.5) приведенный выше код работает, но он не гарантированно будет работать в будущих версиях.