Может кто-нибудь объяснить, что происходит в приведенном ниже фрагменте кода? Я пытаюсь понять приведенный ниже код Scala - PullRequest
0 голосов
/ 28 октября 2019
import org.apache.spark.sql.functions._

def expr(myCols: Set[String], allCols: Set[String]) =
  allCols.toList.map {
    case x if myCols.contains(x) => col(x)
    case x => lit(null).as(x)
  }

1 Ответ

1 голос
/ 28 октября 2019

Этот метод возвращает список Столбцы , а некоторые из столбцов устанавливаются на null при использовании этого списка для выбора столбцов из фрейма данных.

allColsдолжен содержать все столбцы фрейма данных, а myCols должен содержать столбцы, которые вы хотите сохранить. Все остальные столбцы, не содержащиеся в myCols, будут установлены на null:

val df = spark.createDataFrame(Seq((1,2,3),(4,5,6),(7,8,9))).toDF("a","b","c")
df.show
val columns = expr(Set("a"), df.columns.toSet)
df.select(columns:_*).show

будет печатать

 +---+---+---+
|  a|  b|  c|
+---+---+---+
|  1|  2|  3|
|  4|  5|  6|
|  7|  8|  9|
+---+---+---+

+---+----+----+
|  a|   b|   c|
+---+----+----+
|  1|null|null|
|  4|null|null|
|  7|null|null|
+---+----+----+

Внутри вашего метода каждая запись allCols либосопоставляется с фактическим столбцом или литералом null с использованием сопоставления с шаблоном Scala magic.

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