Python 如何在Pyspark中以逗号分隔的参数传递列

Python 如何在Pyspark中以逗号分隔的参数传递列,python,apache-spark,pyspark,pyspark-sql,Python,Apache Spark,Pyspark,Pyspark Sql,我有一个包含数千列的dataframe,我希望在不单独指定列名的情况下将其传递给最大的函数。我该怎么做 例如,我有3列df,我通过指定df.x、df.y将其传递给magest。。等等 df = sqlContext.createDataFrame([(1, 4, 3)], ['x', 'y', 'z']) >>> df.select(greatest(df.x,df.y,df.z).alias('greatest')).show() +--------+ |greatest|

我有一个包含数千列的dataframe,我希望在不单独指定列名的情况下将其传递给最大的函数。我该怎么做

例如,我有3列df,我通过指定df.x、df.y将其传递给magest。。等等

df = sqlContext.createDataFrame([(1, 4, 3)], ['x', 'y', 'z'])
>>> df.select(greatest(df.x,df.y,df.z).alias('greatest')).show()
+--------+
|greatest|
+--------+
|       4|
+--------+
在上面的例子中,我只有3列,但如果是数千列,就不可能一一提及。我试过的两件事都没用。我错过了一些重要的python

df.select(greatest(",".join(df.columns)).alias('greatest')).show()
ValueError: greatest should take at least two columns

df.select(greatest(",".join(df.columns),df[0]).alias('greatest')).show()
u"cannot resolve 'x,y,z' given input columns: [x, y, z];"

df.select(greatest([c for c in df.columns],df[0]).alias('greatest')).show()
Method col([class java.util.ArrayList]) does not exist
最大位置参数*

pyspark.sql.functions.grest*cols

这就是为什么你可以变大df.x,df.y,df.z的原因

*引用,位置参数是

。。。不是关键字参数的参数。位置参数可以出现在参数列表的开头,和/或作为前面带有*的iterable元素传递。例如,在以下调用中,3和5都是位置参数:

complex(3, 5)
complex(*(3, 5))
此外:


使用熊猫。您可以使用apply with pandas从每一行中获取最大值,如果您没有尝试过这一行,但它会有意义:df.selectbest*[colc for c in df.columns].别名“greast”。show@mkaran-有效。但是*在这里的意思是什么呢?*解压列表,以便使用位置参数而不是列表来调用最大值。*cols或*df.columns-它是否像最大值所期望的那样返回列表或逗号分隔的列?我总是对它感到困惑。
complex(3, 5)
complex(*(3, 5))