当前位置: 首页 > 知识库问答 >
问题:

从具有DenseVector行的pyspark数据帧中获取行的最大值

濮赤岩
2023-03-14

我有一个DenseVectors作为行的dataframe:

df = spark.createDataFrame([(Vectors.dense([1,2,3]),),(Vectors.dense([3,4,5]),),(Vectors.dense([6,2,5]),)], ["a"])

我想用UDF找到每一行的最大值。我就是这么做的:

findmax = F.udf(lambda x: max(x),DoubleType())
df_out = df_out.select('*',findmax(df_out['sensor_data']).alias('MAX'))

文件“C:\programdata\anaconda3\envs\python2\lib\site-packages\pyspark\sql\utils.py”,第63行,deco格式返回f(*a,**kw)

文件“C:\programdata\anaconda3\envs\python2\lib\site-packages\py4j\protocol.py”,第319行,格式为get_return_value(target_id,“.”,name,value)

我不知道为什么这不起作用:我发现如果行只是浮点而不是densevector,它会起作用,而且python函数max接受DenseVectors作为输入。

共有1个答案

乐成济
2023-03-14

出现此错误的原因是您将udf的返回类型定义为float,而udf实际返回的是numpy.float64。pyspark将floatnumpy.float64视为不同的类型。将返回类型转换为float,如下所示。
findmax=f.udf(lambda x:float(max(x)),DoubleType())

 类似资料:
  • 问题内容: 这是我的数据框df 我正在尝试从数据帧的每一行中获取最大值,我期望这样的输出 这就是我尝试过的 我没有得到正确的输出,任何帮助将不胜感激。谢谢 问题答案: 使用有: 如果需要新列:

  • 我需要在pyspark数据框中使用窗口上的max date行中的列值创建一个新列。鉴于下面的数据框架,我需要根据最近日期的调整系数为每个资产的每个记录设置一个名为max_adj_factor的新列。

  • 问题内容: 桌子: 我想获取UserId,每个UserId的max(Date)值。即,具有最新日期的每个UserId的值。有没有一种方法可以简单地在SQL中做到这一点?(最好是Oracle) 更新: 对于任何歧义,我们深表歉意:我需要获取所有UserIds。但是对于每个UserId,仅该用户具有最新日期的那一行。 问题答案: 这将检索其my_date列值等于该用户ID的my_date最大值的所有行

  • 问题内容: 我正在处理一个Postgres表(称为“lives”),该表包含带有,和列的记录。我需要一个查询,该查询将为我提供每个usr_id的最新live_remaining总数 有多个用户(与usr_id不同) time_stamp不是唯一的标识符:有时,用户事件(表中的每一行)将使用相同的time_stamp发生。 trans_id仅在很小的时间范围内是唯一的:随着时间的流逝,它会重复 (对

  • 问题内容: 但是,即使该组中有多个具有最大值的记录,我也只需要每组一个记录。 在下面的示例中,我需要一条记录用于“ s2”。对我来说,哪一个都没关系。 问题答案: 您可以使用 设置来实现你的目标 再次更新 很抱歉误解您的意思。如果您要一个组中最大数量的组,可以先对其进行排序

  • 预期输出:获取组之间计数为max的结果行,如: 示例2:这个数据帧,我按分组: 对于上面的示例,我希望获取每个组中等于max的所有行,例如: