Ошибка при передаче широковещательной переменной в UDF, Pyspark
У меня есть функция, которая пытается передать широковещательную переменную в UDF.
Функция выглядит так:
def generate_lookup_code(self, lookup_map):
lookup_map_broadcast = spark_session.sparkContext.broadcast(lookup_map)
print("lookup_map has been broadcasted")
#### UDF function only return a constant string###
def _generate_code(bc_reasoncode_lookup_map):
reasoncode_lookup_map = bc_reasoncode_lookup_map.value
return "hello"
udfGenerateCode = F.udf(_generate_code, StringType())
input_df = input_df.withColumn('code', udfGenerateCode(lookup_map_broadcast))
input_df.show()
Мое намерение - только попытаться передать широковещательную переменную в UDF, однако я получил ошибку:
'Broadcast' object has no attribute '_get_object_id'
Понятия не имею, где не так?
1 ответ
Вам не нужно передавать широковещательную переменную как аргумент UDF, просто обратитесь к ней из функции:
lookup_map_broadcast = spark_session.sparkContext.broadcast(lookup_map)
def _generate_code():
reasoncode_lookup_map = lookup_map_broadcast.value
return "hello"
udfGenerateCode = F.udf(_generate_code, StringType())
input_df = input_df.withColumn('code', udfGenerateCode())
UDF вызывается для каждой строки и может принимать столбец или литерал.