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

Kau*_*rya 30 pyspark pyspark-sql

在pandas中,这可以通过column.name来完成.

但是当它的火花数据帧列如何做同样的事情?

例如,调用程序有一个spark数据帧:spark_df

>>> spark_df.columns
['admit', 'gre', 'gpa', 'rank']
Run Code Online (Sandbox Code Playgroud)

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

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

>>> pandas_df['rank'].name
'rank'
Run Code Online (Sandbox Code Playgroud)

Dav*_*vid 51

您可以通过执行从架构中获取名称

spark_df.schema.names
Run Code Online (Sandbox Code Playgroud)

打印模式对于可视化也很有用

spark_df.printSchema()
Run Code Online (Sandbox Code Playgroud)

  • 我想知道的是列名,它是函数的输入参数。调用程序将通过my_function(spark_df ['rank'])调用my_function。在my_function内部,我如何知道传递的列的名称? (3认同)
  • @ShuaiYuan,这不是我想要的。在 my_function(col) 中我如何知道 col 名称?通过 my_function(spark_df['rank']) 调用函数在 my_function 内部,我想从输入参数中提取 'rank' 作为列名: col (2认同)

Ces*_*aro 11

根据具体情况而定:

  1. 无别名列: column._jc.toString()已经可以正常工作(感谢@numeral)。

  2. 别名列:(column.alias("whatever"))可以提取别名:


num*_*ral 8

唯一的方法是将底层级别转移到JVM.

df.col._jc.toString().encode('utf8')
Run Code Online (Sandbox Code Playgroud)

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

从pyspark/sql/column.py:

def __repr__(self):
    return 'Column<%s>' % self._jc.toString().encode('utf8')
Run Code Online (Sandbox Code Playgroud)

  • 不幸的是,如果有别名的话,这不会提取别名。 (4认同)

小智 5

如果您想要数据框的列名,则可以使用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'