如何使用 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