Не означает быть легкомысленным, но ответ «это зависит»: -)
Канонический способ настройки проекта Firebase состоит в том, чтобы он соответствовал «логическому приложению», и создавать отдельные приложения Firebase для Android или iOS или веб-версий.
Я лично не ставил бы чемоданчик несвязанных приложений в тот же проект Firebase, но ваш пробег может отличаться.
В зависимости от того, что вы хотите сделать, может иметь смысл группировать связанные (но логически разные приложения) в рамках одного проекта Firebase. Но обратите внимание, что это влияет на то, как ваши приложения будут взаимодействовать с функциями Firebase.
Например, все приложения в одном проекте Firebase будут иметь один и тот же логический экземпляр базы данных Firebase (с тем же именем хоста / point).
Возможно, вам захочется ознакомиться с различными функциями, которые вы планируете использовать, и убедитесь, что организационная структура удовлетворяет тем, как вы планируете использовать функции платформы.
Просто используйте немного 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
.
Вы можете создать литерал Column
для перехода к udf с помощью функции lit(...)
, определенной в org.apache.spark.sql.functions
Например:
val takeRight = udf((s: String, i: Int) => s.takeRight(i))
df.select(takeRight($"stringCol", lit(1)))