Seleccionar solo nombres de columnas numéricas o de string de PySpark DataFrame

En este artículo, analizaremos cómo seleccionar solo nombres de columna numéricos o de string de un Spark DataFrame.

Métodos utilizados:

  • createDataFrame: este método se utiliza para crear un Spark DataFrame.
  • isinstance: esta es una función de Python utilizada para verificar si el objeto especificado es del tipo especificado.
  • dtypes: Devuelve una lista de tuplas (columnNane,type). La lista devuelta contiene todas las columnas presentes en DataFrame con sus tipos de datos.
  • schema.fields: Se utiliza para acceder a los metadatos de los campos de DataFrame.

Método 1: 

En este método, la función dtypes se usa para obtener una lista de tuplas (columnNane, type).

Python3

from pyspark.sql import Row
from datetime import date
from pyspark.sql import SparkSession
  
  
spark = SparkSession.builder.getOrCreate()
  
# Creating dataframe from list of Row
df = spark.createDataFrame([
    Row(a=1, b='string1', c=date(2021, 1, 1)),
    Row(a=2, b='string2', c=date(2021, 2, 1)),
    Row(a=4, b='string3', c=date(2021, 3, 1))
])
  
# Printing DataFrame structure
print("DataFrame structure:", df)
  
# Getting list of columns and printing
# result
dt = df.dtypes
print("dtypes result:", dt)
  
# Getting list of columns having type
# string or bigint
# This statement will loop over all the 
# tuples present in dt list
# item[0] will contain column name and
# item[1] will contain column type
columnList = [item[0] for item in dt if item[1].startswith(
    'string') or item[1].startswith('bigint')]
print("Result: ", columnList)

Producción:

DataFrame structure: DataFrame[a: bigint, b: string, c: date]
dtypes result: [('a', 'bigint'), ('b', 'string'), ('c', 'date')]
Result:  ['a', 'b']

Método #2: 

En este esquema de método. los campos se utilizan para obtener los metadatos de los campos, luego el tipo de datos de la columna se extrae de los metadatos y se compara con el tipo de datos deseado.

Python3

from pyspark.sql.types import StringType, LongType
from pyspark.sql import Row
from datetime import date
from pyspark.sql import SparkSession
  
  
# Initializing spark session
spark = SparkSession.builder.getOrCreate()
  
# Creating dataframe from list of Row
df = spark.createDataFrame([
    Row(a=1, b='string1', c=date(2021, 1, 1)),
    Row(a=2, b='string2', c=date(2021, 2, 1)),
    Row(a=4, b='string3', c=date(2021, 3, 1))
])
  
# Printing DataFrame structure
print("DataFrame structure:", df)
  
# Getting and printing metadata
meta = df.schema.fields
print("Metadata: ", meta)
  
# Getting list of columns having type 
# string or int
# This statement will loop over all the fields
# field.name will return column name and
# field.dataType will return column type
columnList = [field.name for field in df.schema.fields if isinstance(
    field.dataType, StringType) or isinstance(field.dataType, LongType)]
print("Result: ", columnList)

Producción:

Estructura de DataFrame: DataFrame[a: bigint, b: string, c: fecha]

Metadatos: [StructField(a,LongType,true), StructField(b,StringType,true), StructField(c,DateType,true)]

Resultado: [‘a’, ‘b’]

Publicación traducida automáticamente

Artículo escrito por aman neekhara y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *