Apache spark 如何从Spark DataFrame中删除列表中给定的多个列名?

Apache spark 如何从Spark DataFrame中删除列表中给定的多个列名?,apache-spark,dataframe,pyspark,apache-spark-sql,pyspark-sql,Apache Spark,Dataframe,Pyspark,Apache Spark Sql,Pyspark Sql,我有一个基于n值创建的动态列表 n=3 在范围(n)内,对于i,drop_lst=['a'+str(i)] 落差(落差) 但上述措施并不奏效 注意: 我的用例需要一个动态列表 如果我只是做了下面没有列出它的工作 df.drop('a0'、'a1'、'a2') 如何使下拉函数与列表一起工作 Spark 2.2似乎没有这种能力。有没有办法不使用select() df.drop(*drop_lst) 您可以使用drop(*cols)2种方法 df.drop('age').collect() df.

我有一个基于n值创建的动态列表

n=3
在范围(n)内,对于i,drop_lst=['a'+str(i)]
落差(落差)
但上述措施并不奏效

注意

我的用例需要一个动态列表

如果我只是做了下面没有列出它的工作

df.drop('a0'、'a1'、'a2')
如何使下拉函数与列表一起工作


Spark 2.2似乎没有这种能力。有没有办法不使用
select()

df.drop(*drop_lst)
您可以使用
drop(*cols)
2种方法

  • df.drop('age').collect()
  • df.drop(df.age.collect()

  • 检查官方文档

    您可以用逗号分隔列表给出列名,例如

    df.drop("col1","col11","col21")
    

    这是如何在scala中删除指定数量的连续列:

    val ll = dfwide.schema.names.slice(1,5)
    dfwide.drop(ll:_*).show
    

    切片采用两个参数星号索引和结束索引。

    谢谢!操作员是做什么的?它的意义是什么?如果你把迭代器放在它的左边,星号将解压迭代器的内容,也就是说,它生成列表中的单个元素。这对我不起作用,它给出:TypeError:drop()正好取2个参数(给出92个参数)。我可能有一个旧版本?为了回答我自己的问题:我刚刚检查了,在我的版本(1.6.2)中,这里描述的列表方法不起作用。解决方案在python中有效,但在scala中不起作用。请参见@fox ghost beneathwhat的答案。collect()在这种情况下做什么?