PySpark – Seleccionar columnas por tipo

En este artículo, discutiremos cómo seleccionar columnas por tipo en PySpark usando Python.

Vamos a crear un marco de datos para la demostración.

Python3

# importing module
import pyspark
  
# importing sparksession from pyspark.sql module
from pyspark.sql import SparkSession
  
# import data field types
from pyspark.sql.types import StringType, DoubleType, 
IntegerType, StructType, StructField, FloatType
  
  
# creating sparksession and giving an app name
spark = SparkSession.builder.appName('sparkdf').getOrCreate()
  
# list  of student  data
data = [(1, "sravan", 9.8, 4500.00), (2, "ojsawi",
                                      9.2, 6789.00),
        (3, "bobby", 8.9, 988.000)]
  
# specify column names with data types
columns = StructType([
    StructField("ID", IntegerType(), True),
    StructField("NAME", StringType(), True),
    StructField("GPA", FloatType(), True),
    StructField("FEE", DoubleType(), True),
  
])
  
# creating a dataframe from the lists of data
dataframe = spark.createDataFrame(data, columns)
  
  
# display
dataframe.show()

Producción:

Podemos seleccionar la columna por su nombre usando las siguientes palabras clave:

  • Entero: int
  • String: string
  • flotar: flotar
  • Doble doble

Método 1: Usando dtypes()

Aquí estamos usando dtypes seguidos del método beginwith() para obtener las columnas de un tipo en particular.

Sintaxis: dataframe[[elemento[0] para elemento en dataframe.dtypes if elemento[1].startswith(‘tipo de datos’)]]

dónde,

  • dataframe es el dataframe de entrada
  • tipo de datos se refiere a los tipos de palabras clave
  • elemento define los valores en la columna

Y finalmente, estamos usando el método de recopilación() para mostrar los datos de la columna

Python3

# importing module
import pyspark
  
# importing sparksession from pyspark.sql module
from pyspark.sql import SparkSession
  
# import data field types
from pyspark.sql.types import (StringType,
DoubleType, IntegerType, StructType,
StructField, FloatType)
  
  
# creating sparksession and giving an app name
spark = SparkSession.builder.appName('sparkdf').getOrCreate()
  
# list  of student  data
data = [(1, "sravan", 9.8, 4500.00), (2, "ojsawi",
                                      9.2, 6789.00), 
        (3, "bobby", 8.9, 988.000)]
  
# specify column names with data types
columns = StructType([
    StructField("ID", IntegerType(), True),
    StructField("NAME", StringType(), True),
    StructField("GPA", FloatType(), True),
    StructField("FEE", DoubleType(), True),
  
])
  
# creating a dataframe from the lists of data
dataframe = spark.createDataFrame(data, columns)
  
# select columns that are integer type
print(dataframe[[item[0]
                 for item in dataframe.dtypes if item[
                   1].startswith('int')]].collect())
  
# select columns that are string type
print(dataframe[[item[0]
                 for item in dataframe.dtypes if item[
                   1].startswith('string')]].collect())
  
# select columns that are float type
print(dataframe[[item[0]
                 for item in dataframe.dtypes if item[
                   1].startswith('float')]].collect())
  
# select columns that are double type
print(dataframe[[item[0]
                 for item in dataframe.dtypes if item[
                   1].startswith('double')]].collect())

Producción:

[Fila (ID = 1), Fila (ID = 2), Fila (ID = 3)]

[Fila(NOMBRE=’sravan’), Fila(NOMBRE=’ojsawi’), Fila(NOMBRE=’bobby’)]

[Fila(GPA=9.800000190734863), Fila(GPA=9.199999809265137), Fila(GPA=8.899999618530273)]

[Fila (TARIFA = 4500.0), Fila (TARIFA = 6789.0), Fila (TARIFA = 988.0)]

Método 2: Usar schema.fields

Aquí estamos usando el método schema.fields para obtener el tipo de las columnas. Estamos verificando el tipo particular usando métodos que están disponibles en el módulo pyspark.sql.types.

Comprobemos uno por uno:

  • Entero – TipoEntero
  • Tipo flotante-flotante
  • Doble – Tipo Doble
  • String- StringType

Estamos usando el operador isinstance() para verificar con estos tipos de datos.

Sintaxis : dataframe[[f.name for f en dataframe.schema.fields if isinstance(f.dataType, datatype)]]

dónde,

  • dataframe es el dataframe de entrada
  • el nombre es los valores
  • tipo de datos se refiere a los tipos anteriores

Python3

# importing module
import pyspark
  
# importing sparksession from pyspark.sql module
from pyspark.sql import SparkSession
  
# import data field types
from pyspark.sql.types import StringType, DoubleType,
IntegerType, StructType, StructField, FloatType
  
  
# creating sparksession and giving an app name
spark = SparkSession.builder.appName('sparkdf').getOrCreate()
  
# list  of student  data
data = [(1, "sravan", 9.8, 4500.00), (2, "ojsawi",
                                      9.2, 6789.00), 
        (3, "bobby", 8.9, 988.000)]
  
# specify column names with data types
columns = StructType([
    StructField("ID", IntegerType(), True),
    StructField("NAME", StringType(), True),
    StructField("GPA", FloatType(), True),
    StructField("FEE", DoubleType(), True),
  
])
  
# creating a dataframe from the lists of data
dataframe = spark.createDataFrame(data, columns)
  
# select columns that are integer type
print(dataframe[[f.name for f in dataframe.schema.fields if isinstance(
    f.dataType, IntegerType)]].collect())
  
# select columns that are string type
print(dataframe[[f.name for f in dataframe.schema.fields if isinstance(
    f.dataType, StringType)]].collect())
  
# select columns that are float type
print(dataframe[[f.name for f in dataframe.schema.fields if isinstance(
    f.dataType, FloatType)]].collect())
  
# select columns that are double type
print(dataframe[[f.name for f in dataframe.schema.fields if isinstance(
    f.dataType, DoubleType)]].collect())

Producción:

[Fila (ID = 1), Fila (ID = 2), Fila (ID = 3)]

[Fila(NOMBRE=’sravan’), Fila(NOMBRE=’ojsawi’), Fila(NOMBRE=’bobby’)]

[Fila(GPA=9.800000190734863), Fila(GPA=9.199999809265137), Fila(GPA=8.899999618530273)]

[Fila (TARIFA = 4500.0), Fila (TARIFA = 6789.0), Fila (TARIFA = 988.0)]

Publicación traducida automáticamente

Artículo escrito por sravankumar8128 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 *