SQL使用Spark引擎执行时,如何在hive UDF中获取Spark的partitionId或taskContext?

How to get the partitionId or taskContext of Spark in hive UDF when SQL executed with Spark engine?

比如我们用Spark引擎执行下面的SQL,需要my_udf(row) return Spark 中的分区 ID。

add jar hdfs:///dir/udf/udf.jar; 
create temporary function my_udf as 'com.my.MyUDF';

select row, my_udf(row) from table;

我知道在MR引擎中执行的Hive UDF中如何获取taskId:,但在Spark引擎中执行时无效。请告诉我如何在 Hive UDF 中获取 Spark 的 partitionID 或 taskContext,非常感谢!

这也许可以做你想做的事(下面的示例 UDF)

import org.apache.spark.TaskContext

val foo = udf  { (x: Int) => TaskContext.getPartitionId }

getPartitionId 函数应该可以获取您需要的信息。

我自己找到了正确答案,请看这里:

以上回答将为您介绍以下提示:

  1. 如何使用MR执行引擎获取Hive UDF中的taskId;
  2. 如何使用 Spark 执行引擎获取 Hive UDF 中的 taskContext 和 partitionId。

希望对你有用!