- html - 我的下拉菜单的内容关闭得太快
- c# - 使用 Html Agility Pack 从网页中的表中获取值而不使用 "SelectNode'
- html - 内容容器下的 CSS 下拉菜单
- html - 如何停止嵌套列表重叠父列表?
我写了一个UDF。它非常慢。我想用 pandas_udf 替换它以利用矢量化。
实际的 udf 有点复杂,但我创建了一个简化的玩具版本。
我的问题:是否可以将玩具示例中的 UDF 替换为可以利用矢量化的 pandas_udf?如果不是,为什么不呢?
P.S:我知道我可以在没有 UDF 的情况下达到同样的效果。那是因为我简化了示例,但这不是我的目标。
from pyspark.sql import functions as f
from pyspark.sql.types import ArrayType, StringType
import pandas as pd
#Example data
df = spark.createDataFrame(pd.DataFrame({ 'Letter': [['A', 'A', 'C'], ['A', 'C', 'A', 'D']],
'Number': [[2, 1, 1], [3, 1, 1, 2]],
})
)
# The UDF I hope to replace with a pandas_udf
@f.udf(ArrayType(StringType()))
def array_func(le, nr):
res=[]
for i in range(len(nr)):
if nr[i]==1:
res.append(le[i])
else:
res.append('Nope')
return res
# Applying the udf
df = df.withColumn('udf', array_func('Letter','Number'))
df.show()
最佳答案
这个怎么样?
from pyspark.sql import functions as F
from pyspark.sql.types import ArrayType, StringType
import pandas as pd
#Example data
df = spark.createDataFrame(pd.DataFrame({ 'Letter': [['A', 'A', 'C'], ['A', 'C', 'A', 'D']],
'Number': [[2, 1, 1], [3, 1, 1, 2]],
})
)
df.show()
# Add a dummy column so you can use groupby
df = df.withColumn('id', F.lit(1))
schm = StructType(df.schema.fields + [StructField('udf', ArrayType(StringType()), True)])
@pandas_udf(schm, PandasUDFType.GROUPED_MAP)
def array_udf(pdf):
res=[]
for ls, ns in zip(pdf['Letter'], pdf['Number']):
r = [l if n == 1 else 'Nope' for l, n in zip(ls, ns)]
res.append(r)
pdf['udf'] = res
return pdf
df = df.groupby('id').apply(array_udf).drop('id')
df.show()
输出:
+------------+------------+------------------+
| Letter| Number| udf|
+------------+------------+------------------+
| [A, A, C]| [2, 1, 1]| [Nope, A, C]|
|[A, C, A, D]|[3, 1, 1, 2]|[Nope, C, A, Nope]|
+------------+------------+------------------+
关于arrays - pandas_udf 对两个 ArrayType(StringType()) 字段进行操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57807336/
我在使用以下代码时遇到 pandas_udf 错误。代码是基于另一列创建具有数据类型的列。相同的代码适用于正常较慢的 udf(已注释掉)。 基本上任何更复杂的“字符串”+数据都会返回错误。 # fro
我面临着繁重的数据转换。简而言之,我有数据列,每个数据列都包含与一些序数相对应的字符串。例如,高、中和低。我的目标是将这些字符串映射到整数以保留顺序。在本例中,为LOW -> 0、MID -> 1 和
我正在尝试制作一个 pandas UDF,它接受两列整数值,并根据这些值之间的差异返回一个小数数组,其长度等于上述差异。 到目前为止,这是我的尝试,我一直在尝试各种不同的方法来让它发挥作用,但这是总体
我正在附加到 AWS EMR 实例的 jupyter notebook 上尝试一些与 pyspark 相关的实验。我有一个 spark 数据框,它从 s3 读取数据,然后过滤掉一些东西。使用 df1.
我开始在本地玩 Spark 并发现这个奇怪的问题 1) pip install pyspark==2.3.1 2)pyspark> 将 Pandas 导入为 pd 从 pyspark.sql.func
This answer很好地解释了如何使用 pyspark 的 groupby 和 pandas_udf 进行自定义聚合。但是,我不可能像示例的这一部分所示那样手动声明我的架构 from pyspar
我正在使用 pandas_udf 在我的 Spark 集群上应用机器学习模型,并且有兴趣预定义通过箭头发送到 UDF 的最小记录数。 我遵循了大部分 UDF 的 databricks 教程... ht
我创建了一个 Pandas UDF,它将输入一个数据帧,在 Primary_Key 和 Predictions 上预测并输出一个数据帧。 schema = StructType([StructFiel
我写了一个UDF。它非常慢。我想用 pandas_udf 替换它以利用矢量化。 实际的 udf 有点复杂,但我创建了一个简化的玩具版本。 我的问题:是否可以将玩具示例中的 UDF 替换为可以利用矢量化
我已经测试过 logger和 print无法在 pandas_udf 中打印消息,无论是集群模式还是客户端模式。 测试代码: import sys import numpy as np import
我有这个 df: df = spark.createDataFrame( [('row_a', 5.0, 0.0, 11.0), ('row_b', 3394.0, 0.0, 454
我在 Jupyter 笔记本中运行以下代码,但出现 ImportError。请注意,“udf”可以导入到 Jupyter 中。 从 pyspark.sql.functions 导入 pandas_ud
我有这个 df: df = spark.createDataFrame( [('row_a', 5.0, 0.0, 11.0), ('row_b', 3394.0, 0.0, 454
可以使用外部库,例如 textdistance在pandas_udf里面?我已经尝试过,但收到此错误: ValueError: The truth value of a Series is ambig
我目前正在使用 PySpark 开发我的第一个完整系统,我遇到了一些奇怪的、与内存相关的问题。在其中一个阶段,我想类似于 Split-Apply-Combine 策略以修改 DataFrame。也就是
我正在使用 PySpark 的新 pandas_udf 装饰器,我试图让它将多个列作为输入并返回一个系列作为输入,但是,我收到一个 TypeError : 无效参数 示例代码 @pandas_udf(
我正在使用 PySpark 的新 pandas_udf 装饰器,我试图让它将多个列作为输入并返回一个系列作为输入,但是,我收到一个 TypeError : 无效参数 示例代码 @pandas_udf(
我无法从可用的 Pyspark 文档中复制 Spark 代码 here. 例如,当我尝试以下与 Grouped Map 有关的代码时: import numpy as np import pandas
我正在尝试将函数应用于 pyspark 中的每个数据集组。我遇到的第一个错误是 Py4JError: An error occurred while calling o62.__getnewargs_
我正在构建多个 Prophet 模型,其中每个模型都传递给 pandas_udf 函数,该函数训练模型并使用 MLflow 存储结果。 @pandas_udf(result_schema, Panda
我是一名优秀的程序员,十分优秀!