Scala Apache Spark и динамический список столбцов внутри метода выбора DataFrame - PullRequest
0 голосов
/ 05 декабря 2018

У меня есть следующий код Scala Spark для анализа txt-файла фиксированной ширины:

val schemaDf = df.select(
  df("value").substr(0, 6).cast("integer").alias("id"),
  df("value").substr(7, 6).alias("date"),
  df("value").substr(13, 29).alias("string")
)

Я хотел бы извлечь следующий код:

  df("value").substr(0, 6).cast("integer").alias("id"),
  df("value").substr(7, 6).alias("date"),
  df("value").substr(13, 29).alias("string")

вдинамический цикл, чтобы иметь возможность определить синтаксический анализ столбца в некоторой внешней конфигурации, что-то вроде этого (где x будет содержать конфигурацию для каждого синтаксического анализа столбца, но пока это простые числа для демонстрационной цели):

val x = List(1, 2, 3)
val df1 = df.select(
    x.foreach { 
        df("value").substr(0, 6).cast("integer").alias("id") 
    }
)

но сейчас следующая строка df("value").substr(0, 6).cast("integer").alias("id") не компилируется со следующей ошибкой:

type mismatch; found : org.apache.spark.sql.Column required: Int ⇒ ?

Что я делаю не так и как правильно вернуть динамический список столбцов внутри df.selectметод?

1 Ответ

0 голосов
/ 05 декабря 2018

select не будет принимать оператор в качестве ввода, но вы можете сохранить значение Columns, которое вы хотите создать, а затем развернуть выражение в качестве ввода для select:

val x = List(1, 2, 3)
val cols: List[Column] = x.map { i =>
  newRecordsDF("value").substr(0, 6).cast("integer").alias("id")
}
val df1 = df.select(cols: _*)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...