如何使用 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 【问题描述】:我知道如何使用transform
和using
创建hive udf,但我不能使用sklearn
,因为并非hive 集群中的所有节点都有sklearn
。
我有一个anaconda2.tar.gz
和sklearn
,我该怎么办?
【问题讨论】:
一种解决方案是将所有源代码复制到您的 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 方包?