query column pyspark pyspark-sql

column - rdd to dataframe pyspark



¿Cómo obtener el nombre de la columna dataframe en pyspark? (4)

He encontrado que la respuesta es muy muy 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" es "colName"

En pandas, esto puede hacerse por column.name.

Pero, ¿cómo hacer lo mismo cuando su columna de marco de datos de chispa?

Por ejemplo, el programa de llamada tiene un marco de datos de chispa: spark_df

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

Este programa llama a mi función: my_function (spark_df [''rank'']) En my_function, necesito el nombre de la columna, es decir, ''rank''

Si era pandas dataframe, podemos usar dentro de my_function

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


La única forma es pasar un nivel subyacente a la JVM.

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

Esta es también la forma en que se convierte a una str en el propio código pyspark.

Desde pyspark / sql / column.py:

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


Puedes obtener los nombres del esquema haciendo

spark_df.schema.names

La impresión del esquema puede ser útil para visualizarlo también

spark_df.printSchema()


Si desea los nombres de columna de su marco de datos, puede usar la clase pyspark.sql. No estoy seguro de que el SDK sea compatible con la indexación explícita de un DF por nombre de columna. Recibí este rastro:

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

Sin embargo, llamando al método de columnas en su marco de datos. Lo que has hecho, te devolverá una lista de nombres de columna:

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

Si desea los tipos de datos de columna, puede llamar al método dtypes:

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

Si quieres una columna en particular, necesitarás acceder a ella por índice:

df.columns[2] devolverá ''High''