Pyspark-将列表/元组传递给toDF函数

Pyspark-将列表/元组传递给toDF函数,pyspark,spark-dataframe,Pyspark,Spark Dataframe,我有一个dataframe,想通过传递列表中的列名来使用toDF对其进行重命名,这里的列列表是动态的,当我执行以下操作时出现错误,我如何实现这一点 >>> df.printSchema() root |-- id: long (nullable = true) |-- name: string (nullable = true) |-- dept: string (nullable = true) columns = ['NAME_FIRST', 'DEPT_NAME'

我有一个dataframe,想通过传递列表中的列名来使用toDF对其进行重命名,这里的列列表是动态的,当我执行以下操作时出现错误,我如何实现这一点

>>> df.printSchema()
root
 |-- id: long (nullable = true)
 |-- name: string (nullable = true)
 |-- dept: string (nullable = true)

columns = ['NAME_FIRST', 'DEPT_NAME']

df2 = df.toDF('ID', 'NAME_FIRST', 'DEPT_NAME')
(or) 
df2 = df.toDF('id', columns[0], columns[1])
如果我们不知道输入数据框中会有多少列,那么这就不起作用了,所以要将列表传递给df2,我尝试如下

df2 = df.toDF('id', columns)
pyspark.sql.utils.IllegalArgumentException: u"requirement failed: The number of columns doesn't match.\nOld column names (3): id, name, dept\nNew column names (2): id, name_first, dept_name"

在这里,它将列表视为单个项目,如何从列表中传递列?

除了没有将所有列添加到“列”数组之外,您尝试的方法是正确的

这将有助于:

columns = ['ID','NAME_FIRST', 'DEPT_NAME']
df2 = df.toDF(columns)
使用我在pyspark中遵循的所有步骤更新答案:

list=[(1,'a','b'),(2,'c','d'),(3,'e','f')]
df = sc.parallelize(list)
columns = ['ID','NAME_FIRST', 'DEPT_NAME']
df2 = df.toDF(columns)
df2=df.toDF(列)不起作用,添加一个*如下-

columns = ['NAME_FIRST', 'DEPT_NAME']

df2 = df.toDF(*columns)
“*”是“splat”运算符:它接受一个列表作为输入,并将其扩展为函数调用中的实际位置参数


您在这里所做的是创建一个新的数据帧,但问题是如何通过传递一个列表来重命名现有的数据帧。执行上述代码后,请尝试执行
newCols=['emp\u id'、'FIRST\u name'、'DEPT\u name']
df.toDF(newCols)
,看看我是否同意您的意见。我错过了OP试图重新命名列的部分。如果我能给大家多竖起一个大拇指就好了