如何将参数传递给不接受字符串的函数 (Pyspark)
How to pass an argument to a function that doesn't take string (Pyspark)
我在 Spark SQL 中有连接功能。此函数需要连接条件,如果我们要连接的列名称不同,则需要将它们作为连接表达式传递。
示例:
x.join(y, x.column1 == y.column2)
这意味着我们正在 x
中的 column1
和 y
[=19 中的 column2
上加入数据帧 x
和 y
=]
我想编写一个函数,将两个数据帧的列名作为参数并连接这些列。问题是连接表达式不能是字符串。我看过这样的问题 one,其中使用映射来映射变量名,但这不符合我的需要。我需要删除使列名称成为字符串的引号并将它们传递给 join
函数。
我已经检查过,如果我们加入的列没有相同的名称(除了生成具有新列名的数据框之一的副本之外,在 Pyspark 中没有其他方法可以做到这一点。这是因为数据框是不可变的并且列名不能更改)
是否有任何其他方法可以将列名传递到连接表达式中?
重新发布我的评论作为答案以供将来参考。您可以使用 gettatr
函数获取 class 或模块的任何属性。
x.join(y, getattr(x, 'column1') == getattr(y, 'column2'))
我在 Spark SQL 中有连接功能。此函数需要连接条件,如果我们要连接的列名称不同,则需要将它们作为连接表达式传递。
示例:
x.join(y, x.column1 == y.column2)
这意味着我们正在 x
中的 column1
和 y
[=19 中的 column2
上加入数据帧 x
和 y
=]
我想编写一个函数,将两个数据帧的列名作为参数并连接这些列。问题是连接表达式不能是字符串。我看过这样的问题 one,其中使用映射来映射变量名,但这不符合我的需要。我需要删除使列名称成为字符串的引号并将它们传递给 join
函数。
我已经检查过,如果我们加入的列没有相同的名称(除了生成具有新列名的数据框之一的副本之外,在 Pyspark 中没有其他方法可以做到这一点。这是因为数据框是不可变的并且列名不能更改)
是否有任何其他方法可以将列名传递到连接表达式中?
重新发布我的评论作为答案以供将来参考。您可以使用 gettatr
函数获取 class 或模块的任何属性。
x.join(y, getattr(x, 'column1') == getattr(y, 'column2'))