当前位置: 首页 > 面试题库 >

PySpark按行功能组合

松鸣
2023-03-14
问题内容

举一个简化的例子,我有一个数据框“ df”,其列为“ col1,col2”,我想在对每列应用一个函数后计算一个按行的最大值:

def f(x):
    return (x+1)

max_udf=udf(lambda x,y: max(x,y), IntegerType())
f_udf=udf(f, IntegerType())

df2=df.withColumn("result", max_udf(f_udf(df.col1),f_udf(df.col2)))

因此,如果df:

col1   col2
1      2
3      0

然后

df2:

col1   col2  result
1      2     3
3      0     4

上面的方法似乎无效,并产生“无法评估表达式:PythonUDF#f …”

我绝对肯定“ f_udf”在我的桌子上可以正常工作,而主要问题在于max_udf。

如果不创建额外的列或使用基本的map / reduce,是否可以完全使用数据框和udfs来完成上述操作?我应该如何修改“ max_udf”?

我也尝试过:

max_udf=udf(max, IntegerType())

产生相同的错误。

我还确认了以下作品:

df2=(df.withColumn("temp1", f_udf(df.col1))
       .withColumn("temp2", f_udf(df.col2))

df2=df2.withColumn("result", max_udf(df2.temp1,df2.temp2))

为什么我不能一口气做到这些?

我想看到一个概括为任何函数“ f_udf”和“ max_udf”的答案。


问题答案:

要将多列或整行传递给UDF,请使用struct:

from pyspark.sql.functions import udf, struct
from pyspark.sql.types import IntegerType

df = sqlContext.createDataFrame([(None, None), (1, None), (None, 2)], ("a", "b"))

count_empty_columns = udf(lambda row: len([x for x in row if x == None]), IntegerType())

new_df = df.withColumn("null_count", count_empty_columns(struct([df[x] for x in df.columns])))

new_df.show()

返回:

+----+----+----------+
|   a|   b|null_count|
+----+----+----------+
|null|null|         2|
|   1|null|         1|
|null|   2|         1|
+----+----+----------+


 类似资料:
  • 在本章中,我们将了解PySpark在敏捷数据科学中的提取功能的应用。 Spark概述 Apache Spark可以定义为快速实时处理框架。 它进行计算以实时分析数据。 Apache Spark作为流处理系统实时引入,也可以处理批处理。 Apache Spark支持交互式查询和迭代算法。 Spark是用“Scala编程语言”编写的。 PySpark可以被认为是Python与Spark的结合。 PyS

  • Verity Sense 配有一个按钮,根据使用情况和按下时长具有不同功能。参见下文,了解按钮在不同模式下的功能以及不同颜色 LED 的含义。 按钮功能 打开/关闭传感器 短按按钮可打开传感器。 按住按钮可关闭传感器。 选择训练模式 要选择训练模式,请短按按钮进行切换,直至所需模式旁的 LED 灯亮起。 您可通过短按按钮来查看已锁定的训练模式。侧边的状态 LED 灯在心率模式下亮蓝色,在记录模式下

  • 我正在尝试编写一个函数,如果< code > selection _ Match = = ' No Match ' then < code > DNB = score _ difference 0.02 然而,我返回相同的df,没有任何修改 虽然它应该回来 Lorem ipsum dolor sit amet,consecetur adipiscing elit,sed do eiusmod te

  • 问题内容: 我正在开始使用Python 3在PyQt5中创建GUI。单击按钮后,我要运行“randomint”函数并将返回的整数显示到名为“lcd”的QLCDNumber。 这是我的代码: 我得到的输出: TypeError:参数1具有意外的类型’NoneType’ 如何获得LCD以显示功能“ randomint”的输出? 问题答案: 问题在于,期望使用插槽(Python可调用对象),但是返回。因

  • Function Composition是使用一个函数的输出作为另一个函数的输入的过程。 如果我们学习composition背后的数学会更好。 在数学中, composition由f{g(x)}表示,其中g()是一个函数,其输出用作另一个函数的输入,即f() 。 如果一个函数的输出类型与第二个函数的输入类型匹配,则可以使用任何两个函数实现函数组合。 我们使用点运算符(。)在Haskell中实现函数

  • 问题内容: 我正在尝试将某些Windows函数(和)用于数据框,但我不知道如何使用它们。 有人可以帮我吗?在Python API文档 中,没有关于它的示例。 具体来说,我正在尝试获取数据框中数字字段的分位数。 我正在使用Spark 1.4.0。 问题答案: 要使用窗口功能,您必须先创建一个窗口。定义与普通SQL几乎相同,这意味着您可以定义顺序,分区或同时定义两者。首先让我们创建一些虚拟数据: 确保

  • 问题内容: 我有一个pyspark数据框为 并且需要按行连接患者姓名,以便获得如下输出: 有人可以帮我有关在pyspark中创建此数据框吗? 提前致谢。 问题答案: 我能想到的最简单的方法是使用

  • 手表有五个按钮,根据使用情况有不同功能。请查看下表了解各个按钮在不同模式中具有的功能。 时间视图和菜单 背光灯 返回 OK 向上/向下 启动背光 在时间视图中,按下查看电池状态符号 长按可锁定按钮和触控显示屏 进入菜单 返回至上一个水平 保留设置不变 取消选择 长按可从菜单返回至时间视图 在时间视图中,长按以开始配对和同步 确认显示屏上所示的选择 长按进入训练准备模式 按下查看有关手表面显示信息的