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

将 UDF 动态应用于数据帧中 N 列中的 1 到 N 列

滕胜涝
2023-03-14

我有一个模式和要应用UDF的列名称。列的名称是用户输入,每个输入的数字可能不同。有没有办法将UDF应用于数据帧中的N列?

试图实现这一点。对于具有col1、col2、col3、col4、col5的模式

  DataFrame newDF = df.withColumn("col2", callUDF("test", (df.col("col2"))));
  or 
  DataFrame newDF = df.withColumn("col2", callUDF("test", (df.col("col2"))))
                 .withColumn("col3", callUDF("test", (df.col("col3"))));
  or
   DataFrame newDF = df.withColumn("col2", callUDF("test", (df.col("col1"))))
                 .withColumn("col3", callUDF("test", (df.col("col3"))))
                 .withColumn("col5", callUDF("test", (df.col("col5"))))
  or for N columns.

有什么想法吗?

共有1个答案

苍元章
2023-03-14

我最终编写了代码来动态生成 SPARK SQL 查询,以便将 UDF 应用于 1 到 N 列。然后将输入数据帧注册为临时表并使用生成查询。

 类似资料:
  • 所以假设我有一个从到的所有整数的列表。 我想用一个函数过滤列表(或者它是谓词?我不太习惯Haskell编程中使用的所有术语)。如果此函数的位置n等于true,我想删除位置n-1、n和1的元素。 示例:假设列表中位置4的元素等于,对于函数等于true。然后我想删除位置、和的元素,它们分别等于、和。所以我的最终列表如下所示: 我是一个没有经验的Haskell程序员,只是为了好玩。我想过使用lambda

  • 我有一个派斯帕克数据帧 我想将其转换为与 pyspark.ml 一起使用。我可以使用字符串索引器将名称列转换为数字类别: 如何用StringIndexer(例如< code>name和< code>food,每个列都有自己的< code>StringIndexer)转换几个列,然后用VectorAssembler生成一个特征向量?还是必须为每一列创建一个< code>StringIndexer?

  • 本文向大家介绍在C ++中找到(1 ^ n + 2 ^ n + 3 ^ n + 4 ^ n)mod 5,包括了在C ++中找到(1 ^ n + 2 ^ n + 3 ^ n + 4 ^ n)mod 5的使用技巧和注意事项,需要的朋友参考一下 在本教程中,我们将解决以下问题。 给定一个整数n,我们必须找到(1 n +2 n +3 n +4 n)%5 如果n大,则数字(1 n +2 n +3 n +4

  • 我从这个URL刮取了这个表: "https://www.patriotsoftware.com/blog/accounting/average-cost-living-by-state/" 看起来像这样: 然后我编写了这个函数来帮助我将字符串转换成整数: 当我只将函数应用于一列时,它就会工作。我在这里找到了关于在多个列上使用的答案:如何将函数应用于多个列 但我下面的代码不起作用,也不会产生错误:

  • 我有一个如下所示的数据框架 我写了一个UDF来将分类转换为二进制和 我将此应用于数据帧,如下所示 如何将多个列传递到 UDF 中,这样我就不必对其他分类列重复自己?

  • 并将其应用于数据表的一列--这是我希望这样做的: 我还没有找到任何简单的方法,正在努力找出如何做到这一点。一定有一个更简单的方法,比将数据rame转换为和RDD,然后从RDD中选择行来获得正确的字段,并将函数映射到所有的值,是吗?创建一个SQL表,然后用一个sparkSQL UDF来完成这个任务,这更简洁吗?