如何在pyspark中获取dataframe列的名称?

时间:2016-09-28 11:55:48

标签: pyspark pyspark-sql

在pandas中,这可以通过column.name。

完成

但是当它的spark数据框列如何做同样的事情?

e.g。调用程序有一个spark数据帧:spark_df

>>> spark_df.columns
['admit', 'gre', 'gpa', 'rank']

这个程序调用我的函数:my_function(spark_df [' rank']) 在my_function中,我需要列的名称,即' rank'

如果是pandas数据帧,我们可以在my_function中使用

>>> pandas_df['rank'].name
'rank'

5 个答案:

答案 0 :(得分:38)

您可以通过

获取架构中的名称
spark_df.schema.names

打印架构对于将其可视化也很有用

spark_df.printSchema()

答案 1 :(得分:8)

唯一的方法是将基础级别转移到JVM。

df.col._jc.toString().encode('utf8')

这也是它在pyspark代码中转换为str的方式。

来自pyspark / sql / column.py:

def __repr__(self):
    return 'Column<%s>' % self._jc.toString().encode('utf8')

答案 2 :(得分:2)

如果需要数据帧的列名,可以使用pyspark.sql类。我不确定SDK是否支持按列名显式索引DF。我收到了这个追溯:

>>> df.columns['High'] Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: list indices must be integers, not str

但是,在数据框上调用columns方法。您已完成此操作,将返回列名列表:

df.columns将返回['Date', 'Open', 'High', 'Low', 'Close', 'Volume', 'Adj Close']

如果需要列数据类型,可以调用dtypes方法:

df.dtypes将返回[('Date', 'timestamp'), ('Open', 'double'), ('High', 'double'), ('Low', 'double'), ('Close', 'double'), ('Volume', 'int'), ('Adj Close', 'double')]

如果您需要特定列,则需要通过索引访问它:

df.columns[2]将返回'High'

答案 3 :(得分:0)

我发现答案非常简单...

// It is in java, but it should be same in pyspark
Column col = ds.col("colName"); //the column object
String theNameOftheCol = col.toString();

变量“ theNameOftheCol”是“ colName”

答案 4 :(得分:0)

Python

正如@numeral正确地说的那样,column._jc.toString()在没有混淆的列的情况下工作正常。

对于别名列(即column.alias("whatever")),即使不使用正则表达式str(column).split(" AS ")[1].split("`")[1]也可以提取别名。

我不知道 Scala 语法,但是我敢肯定可以做到这一点。