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

在不使用UDF的情况下向pyspark数据帧添加新列?

容阳焱
2023-03-14

我目前有一个pyspark数据帧,其中一列包含一些数字行,我想使用我编写的函数来查找这些数字行,以返回一个信息字符串。我知道简单的方法是使用withCoulmn并定义一个UDF来从旧列创建一个新列,但是我的函数的某些方式使它不能注册为UDF。我可以根据旧列的值用新列创建一个新的数据框架,而不创建UDF吗?

共有1个答案

谷梁英资
2023-03-14

您可以从数据帧转到 rdd,然后再返回到数据帧。例如,假设您有一个包含两列的数据帧 - “col1”和“col2”:

df = sqlContext.createDataFrame([[1,2],[3,4],[5,6]],['col1','col2'])
df.show()

+----+----+
|col1|col2|
+----+----+
|   1|   2|
|   3|   4|
|   5|   6|
+----+----+

您可以转换为rdd,通过映射运行它,并返回一个包含“col1”、“col2”和新列的元组-在本例中为“col3”(gen_col_3将是您的函数):

def gen_col_3(col1, col2):
    return col1 + col2

rdd = data.rdd.map(lambda x: (x['col1'], x['col2'], gen_col_3(x['col1'],x['col2'])))

然后您可以将其转换回数据帧,如下所示:

df = rdd.toDF(['col1','col2','col3'])
df.show()

+----+----+----+
|col1|col2|col3|
+----+----+----+
|   1|   2|   3|
|   3|   4|   7|
|   5|   6|  11|
+----+----+----+
 类似资料:
  • 我有一个 功能,请告诉我是否有任何解决方法。 谢谢你。!

  • 我是pyspark的新手,我来尝试做一些像下面这样的事情,为每个cookie调用一个函数Print细节,然后将结果写入文件。spark.sql查询返回正确的数据,我也可以将其序列化为文件。有人可以帮助每个cookie上的for语句。调用UDF的语法应该是什么,如何将输出写入文本文件? 任何帮助是值得赞赏的。谢谢

  • 我正在尝试在PySpark中为两个数据框(df1和df2)创建自定义连接(类似于此),代码如下所示: 我得到的错误消息是: 有没有办法编写一个可以处理来自两个单独数据帧的列的 PySpark UDF?

  • 有没有办法选择整行作为一列输入到Pyspark过滤器udf中? 我有一个复杂的过滤函数“my_filter”,我想应用于整个数据帧: 但是 引发错误,因为这不是有效的操作。 我知道我可以将数据帧转换为RDD,然后使用RDD的过滤方法,但我不想将其转换为RDD,然后再转换回数据帧。我的数据帧具有复杂的嵌套类型,因此当我尝试再次将 RDD 转换为数据帧时,架构推断将失败。

  • 我有两个数据帧DF1和DF2。 DF1: DF2: 我需要来自DF2的行数,其中EmploymentType='Employee',EmpStatus='Active',EmpStartDate 输出: 如何在不合并两个数据帧的情况下实现这一点? 我不能合并数据帧,因为没有公共键,而且因为我需要基于条件的行数,我不能在任何临时列上加入数据帧,因为我需要避免交叉连接。

  • 如何在sonarqube中添加注册新规则而不重新启动服务器。我在一个质量配置文件中有50条规则,在分析时使用violation.xml,它包含的新规则没有在声纳数据库中注册,所以在分析时,我需要检查声纳数据库,如果规则不可用,它需要添加到声纳数据库中,分析应该继续。如何在不重新启动服务器的情况下添加规则?请帮忙谢谢。