Как использовать значение non-column в UserDefinedFunction (UDF) для добавления столбца в DataFrame? [Дубликат]

Не означает быть легкомысленным, но ответ «это зависит»: -)

Канонический способ настройки проекта Firebase состоит в том, чтобы он соответствовал «логическому приложению», и создавать отдельные приложения Firebase для Android или iOS или веб-версий.

Я лично не ставил бы чемоданчик несвязанных приложений в тот же проект Firebase, но ваш пробег может отличаться.

В зависимости от того, что вы хотите сделать, может иметь смысл группировать связанные (но логически разные приложения) в рамках одного проекта Firebase. Но обратите внимание, что это влияет на то, как ваши приложения будут взаимодействовать с функциями Firebase.

Например, все приложения в одном проекте Firebase будут иметь один и тот же логический экземпляр базы данных Firebase (с тем же именем хоста / point).

Возможно, вам захочется ознакомиться с различными функциями, которые вы планируете использовать, и убедитесь, что организационная структура удовлетворяет тем, как вы планируете использовать функции платформы.

11
задан zero323 22 February 2016 в 12:13
поделиться

2 ответа

Просто используйте немного currying:

def convertDateFunc(resolution: DateResolutionType) = udf((x:String) => 
  SparkDateTimeConverter.convertDate(x, resolution))

и используйте его следующим образом:

case FieldDataType.Date => convertDateFunc(resolution(i))(allCols(i))

На боковой ноте вы должны взглянуть на sql.functions.trunc и sql.functions.date_format. Они должны по крайней мере частично выполнять работу без использования UDF вообще.

Примечание:

В Spark 2.2 или более поздней версии вы можете использовать функцию typedLit:

import org.apache.spark.sql.functions.typedLit

, которые поддерживают более широкий диапазон литералов, таких как Seq или Map.

27
ответ дан Mysterion 18 August 2018 в 04:20
поделиться

Вы можете создать литерал Column для перехода к udf с помощью функции lit(...), определенной в org.apache.spark.sql.functions

Например:

val takeRight = udf((s: String, i: Int) => s.takeRight(i))
df.select(takeRight($"stringCol", lit(1)))
10
ответ дан Michael Armbrust 18 August 2018 в 04:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: