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