如何使用 Hive 上下文中的 Pyspark 调用用 Java 编写的 Hive UDF

Posted

技术标签:

【中文标题】如何使用 Hive 上下文中的 Pyspark 调用用 Java 编写的 Hive UDF【英文标题】:How to call a hive UDF written in Java using Pyspark from Hive Context 【发布时间】:2016-07-20 21:53:02 【问题描述】:

我在 hive 中使用 getLastProcessedVal2 UDF 从表中获取最新的分区。此 UDF 是用 java 编写的。我想使用来自 pyspark 的相同 UDF 使用 hive 上下文。

dfsql_sel_nxt_batch_id_ini=sqlContext.sql(''' select l4_xxxx_seee.**getLastProcessedVal2**("/data/l4/work/hive/l4__stge/proctl_stg","APP_AMLMKTE_L1","L1_AMLMKT_MDWE","TRE_EXTION","2.1")''')

错误:

错误 exec.FunctionRegistry:无法加载 UDF 类: java.lang.ClassNotFoundException:

【问题讨论】:

【参考方案1】:

pyspark shell 启动为:

pyspark --jars /path/to.udf.jar <all-other-param>

使用--jars 选项提交您的 pyspark 作业:

spark-submit --jars /path/to/udf.jar <all-other-param>

【讨论】:

【参考方案2】:

您可以使用SQLContext 方法udf 注册该用户定义的函数,在那里您可以看到您必须传递一个字符串作为第一个参数,它将代表您使用udf 时的名称SQL查询。

例如

sqlContext.udf().register("slen",
       (String arg1) -> arg1.length(),
       DataTypes.IntegerType);

sqlContext.sql("SELECT slen(name) FROM user").show();

【讨论】:

以上是关于如何使用 Hive 上下文中的 Pyspark 调用用 Java 编写的 Hive UDF的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 pyspark 从 hive 表中查询复杂的 SQL 语句

如何使用 jupyter notebook 在 pyspark 中的 Hive 上使用 %sql Magic 字符串启用 spark SQL

PySpark/Hive:如何使用 LazySimpleSerDe 创建表以转换布尔值“t”/“f”?

如何使用 PySpark 检查 Hive 表是不是存在

如何使用 pyspark 并行插入 Hive

如何使用 Hive 仓库连接器在 pyspark 中执行 HQL 文件