Scala: создание списка функций из импорта - PullRequest
0 голосов
/ 13 июня 2018

Я пытаюсь создать список функций, чтобы я мог отобразить его в DataFrame, но даже после поиска я не могу понять, как передать полное имя функции в список.Даже с учетом того, что у меня есть компиляция, я вполне уверен, что math.min и math.max - это не то, что я ищу, поскольку функции, которые я на самом деле выполняю, поступают из org.apache.spark.sql.functions._ import.

Как создать список функций из определенного импорта?

import org.apache.spark.sql.functions._

// This works - map each function over the DF columns
df.select(df.columns.map(mean): _*).show
df.select(df.columns.map(max): _*).show
df.select(df.columns.map(min): _*).show  

val functions = Array(math.min _, math.max _) // this isn't throwing errors  
/*****************************************************************************/  
// These attempts to create function lists don't work
val functions = Array(org.apache.spark.sql.functions.mean _, math.min _, math.max _) // won't compile  
val functions = Array(_ => org.apache.spark.sql.functions.mean(_), math.min _, math.max _) // doesn't work

// apply each function to the columns and then combine into one dataframe
functions.map(f => df.select(numeric_df.columns.map(f): _*)).reduce(_ union _).show

1 Ответ

0 голосов
/ 13 июня 2018

Если вы хотите создать список с константами a, b, ..., z, то вы

  1. Убедитесь, что константы находятся в области видимости (например,их импорт)
  2. Поместите их в список

Примерно так:

import org.apache.spark.sql.functions.{mean, min, max}
val functions: Array[String => Column] = 
  Array(mean(_: String), min(_: String), max(_: String))

Явные аннотации типов в расширениях eta необходимы, потому что методы mean, min, max перегружены (есть и mean(colName: String), и mean(c: Column)).

Эти функции, конечно, не имеют ничего общего с math.max и т. Д., Это искраФункции sql, которые можно применять к столбцам.

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