如何使用 python 和 3rd 方包(如 sklearn)为 hive 创建一个 udf?

Posted

技术标签:

【中文标题】如何使用 python 和 3rd 方包(如 sklearn)为 hive 创建一个 udf?【英文标题】:How to create an udf for hive using python with 3rd party package like sklearn? 【发布时间】:2017-03-21 12:26:38 【问题描述】:

我知道如何使用transformusing 创建hive udf,但我不能使用sklearn,因为并非hive 集群中的所有节点都有sklearn。 我有一个anaconda2.tar.gzsklearn,我该怎么办?

【问题讨论】:

一种解决方案是将所有源代码复制到您的 udf。我有一个需要 itertools 的猪 UDF,但我们拥有的 python 版本是 2.6.6,它没有 itertools。所以我查找了排列的实现并将其放入我的 UDF 中。因此,我没有调用itertools.permutations,而是调用了在我的UDF 中定义的permutations。如果您需要的函数有很多依赖项,这可能不可行。另一种选择是在每个节点上安装 scikit-learn。 【参考方案1】:

我最近开始研究这种方法,我觉得问题不是要让所有“蜂巢节点”都在它们上面安装 sklearn(正如你上面提到的),我觉得这更像是一个兼容性问题而不是 'sklearn节点可用性'之一。我认为 sklearn (尚未)设计为作为并行算法运行,因此可以在短时间内处理大量数据。


作为一种方法,我正在尝试做的是通过“pyhive”(例如)将 python 与“hive”通信,并在该代码中实现必要的 sklearn 库/调用。这里的粗略假设是这个“sklearn-hive-python”代码将在每个节点中运行并在“map-reduce”级别处理数据。 我不能说这是正确的解决方案或正确的方法(但),但这是我在搜索一段时间后可以得出的结论。

【讨论】:

谢谢。我将sklearn 用于仅配置单元映射的作业,因此作业之间没有通信(如reduce)。 你可以通过'spark'访问hdfs文件,然后你可以使用'spark-sklearn' (pypi.python.org/pypi/spark-sklearn/0.2.0)。我宁愿让 python 直接与 hadoop 对话并完成所有必要的 map-reduce 工作,然后我通过 spark-sklearn 处理输出数据(数据很大并且存储在您机器中的某个数据仓库中)。我相信 spark-sklearn 应该注意数据大小。

以上是关于如何使用 python 和 3rd 方包(如 sklearn)为 hive 创建一个 udf?的主要内容,如果未能解决你的问题,请参考以下文章

在不修改 sys.path 或 3rd 方包的情况下导入 Python 包中的供应商依赖项

尝试在 Databricks 上安装 H2O。如何在 Databricks 中安装 3rd 方包?

使用自定义容器扩展/编译器传递中声明的容器参数配置 Symfony 3rd 方包

如何在升级 Laravel 时选择第三方包版本

Python使用TUNA提升pip安装第3方包的速度

Python使用TUNA提升pip安装第3方包的速度