从Spark数据框中选择或删除重复的列

时间:2018-09-06 13:22:43

标签: apache-spark pyspark apache-spark-sql pyspark-sql

给出一个Spark数据框,该列具有重复的列名(例如A),但我不能修改其上游或源,我该如何选择,删除或重命名其中一个列,以便我可以检索列值?

df.select('A')向我显示了一个模棱两可的列错误,filterdropwithColumnRenamed也是如此。如何选择其中一列?

1 个答案:

答案 0 :(得分:2)

经过数小时的研究,我发现的唯一方法是重命名列集,然后使用新集作为标题创建另一个数据框。

例如,如果您有:

>>> import pyspark
>>> from pyspark.sql import SQLContext
>>> 
>>> sc = pyspark.SparkContext()
>>> sqlContext = SQLContext(sc)
>>> df = sqlContext([(1, 2, 3), (4, 5, 6)], ['a', 'b', 'a'])
DataFrame[a: bigint, b: bigint, a: bigint]
>>> df.columns
['a', 'b', 'a']
>>> df2 = df.toDF('a', 'b', 'c')
>>> df2.columns
['a', 'b', 'c']

您可以使用df.columns获取列列表,然后使用循环重命名所有重复项以获取新的列列表(不要忘记传递*new_col_list而不是new_col_listtoDF函数,否则将引发无效的计数错误。