list - PySpark 传递列表到用户定义函数
问题描述
我有一个带有一列的 DataFrame。在该列的每一行中,都有一个具有不同整数个数的列表。例如,第 1 行有一个包含 5 个整数的列表。第 2 行有一个包含 8 个整数的列表,并且......我想编写一个 UDF,它将每一行作为一个列表并将列表中的所有整数相乘并将结果作为一个数字返回。我想在另一列中有答案,所以它是 df.withColumn(...) 出于某种原因,我确实想使用 UDF而不是任何其他预构建的函数或命令。感谢您的时间和支持。
解决方案
定义一些示例输入数据:
df = spark.createDataFrame([
(1, [3, 4, 8]), (2, [7, 2, 6, 8])
], ("id", "list_of_ints"))
df.show()
的定义udf
:
from pyspark.sql.functions import udf, col
def product(numbers):
a = 1
for num in numbers:
a *= num
return a
from pyspark.sql.types import IntegerType
product_udf = udf(lambda z: product(z), IntegerType())
并添加一个包含所有列表元素乘积的列:
df.withColumn("product", product_udf("list_of_ints")).show()
+---+------------+-------+
| id|list_of_ints|product|
+---+------------+-------+
| 1| [3, 4, 8]| 96|
| 2|[7, 2, 6, 8]| 672|
+---+------------+-------+
希望这可以帮助!
推荐阅读
- android - 如何使 recyclerView_items 不可点击,而其中一个被点击并工作?
- excel - VBA - 关闭/展开/收回组合框列表?
- javascript - 如何重定向到在 javascript 中添加收件人的 Outlook 邮件?
- xamarin - 在 Xamarin Forms iOS 中启用 AppCenter 崩溃和分析时,本机链接失败,重复符号:“_cxa+throw”
- jquery - 而不是正确的值 html 代码出现在 JQuery 中
- jquery - 如何在 CSS/jQuery 中强制 div 仅在一个方向上展开或调整大小
- javascript - 如何使用 Selenium WebDriver 检查元素是否在视图中?
- asp.net - 从 ASP.NET Core 2.2 迁移到 3.1 时 services.BuildServiceProvider(在 ConfigureServices 中)的替代代码
- python-3.x - 如果结果为空,则两个列表和处理异常之间的区别
- javascript - 为什么我的嵌套数组元素没有正确添加在一起?