Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将参数传递给不带';t带弦(Pyspark)_Python_Join_Argument Passing_Apache Spark Sql_Pyspark - Fatal编程技术网

Python 如何将参数传递给不带';t带弦(Pyspark)

Python 如何将参数传递给不带';t带弦(Pyspark),python,join,argument-passing,apache-spark-sql,pyspark,Python,Join,Argument Passing,Apache Spark Sql,Pyspark,我在Spark SQL中有连接函数。此函数需要一个联接条件,如果要联接的列没有相同的名称,则需要将它们作为联接表达式传递 例如: x.join(y, x.column1 == y.column2) 这意味着我们将在x中的column1和y中加入数据帧x和y中的column2 我想编写一个函数,将两个数据帧的列名作为参数,并对这些列进行联接。问题是联接表达式不能是字符串。我看过这样的问题,其中映射用于映射变量名,但这不符合我的需要。我需要删除使列名成为字符串的引号,并将它们传递给join函数 x

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

例如:

x.join(y, x.column1 == y.column2)
这意味着我们将在
x
中的
column1
y
中加入数据帧
x
y
中的
column2

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

x.join(y, getattr(x, 'column1') == getattr(y, 'column2'))
我已经检查过了,如果我们要加入的列没有相同的名称,那么在Pyspark中没有其他方法可以做到这一点(除了生成一个具有新列名的数据帧副本。这是因为数据帧是不可变的,并且列名不能更改)


是否有其他方法将列名传递到联接表达式中?

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

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

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

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

你能试试
x.join(y,getattr(x,'column1')==getattr(y,'column2'))
?我的猜测是,这也是类型
@hgwells它也是一个列类型:\n很抱歉,你怀疑它是否起作用了吗?你能试试
x.join(y,getattr(x,'column1')==getattr(y,'column2'))
?@hgwells当我这样做时,我得到了实际的列:
type(getattr(x,'column1'))
如果您按照示例中的方式操作,那么x.column1的类型是什么?我的猜测是,这也是一种
@hgwells类型,它也是一种列类型:\n很抱歉,我怀疑你认为它起作用了吗?