如何将参数传递给不带字符串的函数(Pyspark)

Posted

技术标签:

【中文标题】如何将参数传递给不带字符串的函数(Pyspark)【英文标题】:How to pass an argument to a function that doesn't take string (Pyspark) 【发布时间】:2015-08-05 22:07:25 【问题描述】:

我在 Spark SQL 中有 join 函数。此函数需要一个连接条件,如果我们要连接的列名称不同,则需要将它们作为连接表达式传递。

例子:

x.join(y, x.column1 == y.column2)

这意味着我们在 xx 中的 column1column2 中加入数据帧 xy y

我想编写一个函数,它将两个数据框的列名作为参数并连接这些列。问题是连接表达式不能是字符串。我看过像one 这样的问题,其中使用映射来映射变量名,但这不符合我的需要。我需要删除使列名成为字符串的引号并将它们传递给join 函数。

我已经检查过,如果我们加入的列没有相同的名称(除了生成具有新列名的数据框之一的副本之外),在 Pyspark 中没有其他方法可以执行此操作。这是因为数据框是不可变的,不能更改列名)

还有其他方法可以将列名传递到连接表达式中吗?

【问题讨论】:

你能试试x.join(y, getattr(x, 'column1') == getattr(y, 'column2'))吗? @hgwells 当我这样做时,我得到了实际的列:type(getattr(x, 'column1')) <class 'pyspark.sql.column.Column'> x.column1 的类型是什么?我的猜测是,这也是<class 'pyspark.sql.column.Column'> 类型 @hgwells 它也是一个列类型:\抱歉怀疑 你让它工作了吗? 【参考方案1】:

重新发布我的评论作为将来参考的答案。您可以使用gettatr 函数获取类或模块的任何属性。

x.join(y, getattr(x, 'column1') == getattr(y, 'column2'))

【讨论】:

以上是关于如何将参数传递给不带字符串的函数(Pyspark)的主要内容,如果未能解决你的问题,请参考以下文章

PySpark 将 Dataframe 作为额外参数传递给映射

如何将带有 args 的成员函数作为参数传递给另一个成员函数?

如何使用 pySpark 决定将 numClasses 参数传递给 SPark MLlib 中的随机森林算法

如何在 PySpark 中将多个参数传递给 Pandas UDF?

如何使用 QT 和 C++ 将字符串参数传递给函数

PySpark - 将列表作为参数传递给 UDF + 迭代数据框列添加