Я думаю о реализации выражения в Spark для выполнения преобразования (в настоящее время UDF), но я хочу, чтобы это выражение могло использовать большой сгенерированный драйвером TreeMap (собирающийся выполнить поиск по диапазону).
Можно ли использовать в выражениях широковещательные переменные, есть ли недостатки? Есть ли лучшие идеи о том, как использовать передаваемую переменную внутри выражения?
//Broadcasted somewhere else
val broadcastedVariable = sparkSession.sparkContext.broadcast(new TreeMap(...))
case class GenerateMyItem(timeZoneId: Option[String] = None)
extends LeafExpression with TimeZoneAwareExpression with CodegenFallback {
def this() = this(None)
override def foldable: Boolean = true
override def nullable: Boolean = false
override def dataType: DataType = DateType
override def withTimeZone(timeZoneId: String): TimeZoneAwareExpression =
copy(timeZoneId = Option(timeZoneId))
override def eval(input: InternalRow): Any = {
broadcastedVariable.value(0) //Lets assume I want to return the broadcast variable
}
override def prettyName: String = "current_date"
}
Спасибо!