首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用ArrayType列将UDF重写成熊猫udf

用ArrayType列将UDF重写成熊猫udf
EN

Stack Overflow用户
提问于 2020-11-22 23:14:38
回答 1查看 336关注 0票数 2

我正试着把UDF改写成熊猫UDF。

但是,当涉及到包含ArrayType的列时。我正在努力寻找正确的解决办法。

我有如下数据:

代码语言:javascript
复制
+-----------+--------------------+
|      genre|                 ids|
+-----------+--------------------+
|      Crime|[6, 22, 42, 47, 5...|
|    Romance|[3, 7, 11, 15, 17...|
|   Thriller|[6, 10, 16, 18, 2...|
|  Adventure|[2, 8, 10, 15, 29...|
|   Children|[1, 2, 8, 13, 34,...|
|      Drama|[4, 11, 14, 16, 1...|
|        War|[41, 110, 151, 15...|
|Documentary|[37, 77, 99, 108,...|
|    Fantasy|[2, 56, 60, 126, ...|
|    Mystery|[59, 113, 123, 16...|
+-----------+--------------------+

以下UDF运行良好:

代码语言:javascript
复制
pairs_udf = udf(lambda x: itertools.combinations(x, 2), transformer.schema)
df = df.select("genre", pairs_udf("ids").alias("ids"))

输出如下:

代码语言:javascript
复制
+-----------+--------------------+
|      genre|                 ids|
+-----------+--------------------+
|      Crime|[[6, 22], [6, 42]...|
|    Romance|[[3, 7], [3, 11],...|
|   Thriller|[[6, 10], [6, 16]...|
|  Adventure|[[2, 8], [2, 10],...|
|   Children|[[1, 2], [1, 8], ...|
|      Drama|[[4, 11], [4, 14]...|
|        War|[[41, 110], [41, ...|
|Documentary|[[37, 77], [37, 9...|
|    Fantasy|[[2, 56], [2, 60]...|
|    Mystery|[[59, 113], [59, ...|
+-----------+--------------------+

但是,在用pandas udf编写函数时,什么是等价的。

PS:我明白,或者,我可以用交叉连接来达到同样的效果.

但是,我更好奇的是熊猫udf是如何用ArrayType处理专栏的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-28 03:22:28

我将在此分享我的发现:

为了让熊猫udf为您的项目工作,有三个方面:

1.熊猫UDF,或者更准确地说,Apache不像普通udf那样支持复杂类型。( pyspark 3.0.1pyarrow 2.0.0)

例如:

2.如果您正在运行Java 11,这是(py)Spark 3中的缺省值。您需要添加以下内容,作为spark配置的一部分:

代码语言:javascript
复制
spark.driver.extraJavaOptions='-Dio.netty.tryReflectionSetAccessible=true'
spark.executor.extraJavaOptions='-Dio.netty.tryReflectionSetAccessible=true'

这将解决上面提到的java.lang.UnsupportedOperationException

3.确保将虚拟环境python添加到pyspark_python

environ['PYSPARK_PYTHON']='./your/virtual/enviroment/path'

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64960642

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档