给定一个具有重复列名称的 Spark 数据帧(例如。A
(无法修改上游或源,如何选择、删除或重命名其中一列以便检索列值?
df.select('A')
向我展示了一个模棱两可的列错误,filter
、drop
和withColumnRenamed
也是如此。如何选择其中一列?
经过数小时的研究,我发现的唯一方法是重命名列集,然后使用新集作为标题创建另一个数据帧。
例如,如果您有:
>>> 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_list
到函数toDF
否则它会抛出无效计数错误(。