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
函数应该可以获取您需要的信息。
我自己找到了正确答案,请看这里:
以上回答将为您介绍以下提示:
- 如何使用MR执行引擎获取Hive UDF中的taskId;
- 如何使用 Spark 执行引擎获取 Hive UDF 中的 taskContext 和 partitionId。
希望对你有用!
比如我们用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:
这也许可以做你想做的事(下面的示例 UDF)
import org.apache.spark.TaskContext
val foo = udf { (x: Int) => TaskContext.getPartitionId }
getPartitionId
函数应该可以获取您需要的信息。
我自己找到了正确答案,请看这里:
以上回答将为您介绍以下提示:
- 如何使用MR执行引擎获取Hive UDF中的taskId;
- 如何使用 Spark 执行引擎获取 Hive UDF 中的 taskContext 和 partitionId。
希望对你有用!