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'
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()
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')
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'
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"