在 Spark SQL DataFrame 中调用 UDF 方法内的其他方法/变量

Sha*_*kar 0 scala apache-spark apache-spark-sql udf

我有一个 Spark SQL DF,我在其中尝试调用一个 UDF [我使用 Spark SQL 创建的udf

val udfName = udf(somemethodName)
val newDF = df.withColumn("columnnew", udfName(col("anotherDFColumn"))
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用另一个存储为valsomemethodName 内部的 DF,但 DF 为空。

仅当我在 . 中使用 where 子句时才会发生这种情况newDF

我错过了什么吗?是否无法在 UDF 方法中使用另一个变量/方法?

或者我必须对广播做些什么?目前我正在本地运行它,而不是在集群中。

Tza*_*har 5

是否无法在 UDF 方法中使用另一个变量/方法

当且仅当该变量/方法可以序列化时,才有可能- UDF 是一个必须序列化并分发给执行器的闭包。

Dataframe无法序列化(它是指向其他分布式数据的指针,因此没有逻辑方法可以将其序列化而不将其收集到驱动程序内存中),因此显示为当您尝试使用 UDF 时null

您可能需要join某个键上的两个数据帧,然后使用从连接的数据帧中获取列的 UDF(或标准转换)。