web-dev-qa-db-fra.com

Comment obtenir le nom de la colonne dataframe dans pyspark?

Dans les pandas, cela peut être fait par column.name.

Mais comment faire la même chose quand sa colonne de spark dataframe?

par exemple. Le programme appelant a un spark dataframe: spark_df

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

Ce programme appelle ma fonction: my_function (spark_df ['rank']]). Dans my_function, j'ai besoin du nom de la colonne "rank".

Si c’était pandas dataframe, nous pouvons utiliser inside my_function

>>> pandas_df['rank'].name
'rank'
27
Kaushik Acharya

Vous pouvez obtenir les noms du schéma en faisant

spark_df.schema.names

L'impression du schéma peut être utile pour le visualiser également

spark_df.printSchema()
46
David

Le seul moyen consiste à accéder à la machine virtuelle Java à un niveau sous-jacent.

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

C'est également comme cela qu'il est converti en str dans le code pyspark lui-même.

De pyspark/sql/column.py:

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

Si vous voulez les noms de colonne de votre dataframe, vous pouvez utiliser la classe pyspark.sql. Je ne sais pas si le SDK prend en charge l'indexation explicite d'un DF par nom de colonne. J'ai reçu cette trace:

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

Cependant, l'appel de la méthode columns sur votre dataframe, ce que vous avez fait, renverra une liste de noms de colonnes:

df.columns Retournera ['Date', 'Open', 'High', 'Low', 'Close', 'Volume', 'Adj Close']

Si vous voulez les types de données de la colonne, vous pouvez appeler la méthode dtypes:

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

Si vous voulez une colonne particulière, vous devrez y accéder par index:

df.columns[2] Retournera 'High'

3
Pat

J'ai trouvé la réponse est très très simple ...

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

La variable "theNameOftheCol" est "colName"

1
Yucci Mel