¿Cómo dividir un marco de datos de PySpark en dos marcos de datos de filas?

En este artículo, vamos a aprender cómo dividir un PySpark DataFrame en dos filas. Cortar un DataFrame es obtener un subconjunto que contiene todas las filas de un índice a otro.

Método 1: usar las funciones limit() y rest()

En este método, primero hacemos un PySpark DataFrame con datos precodificados usando createDataFrame() . Luego usamos la función limit() para obtener un número particular de filas del DataFrame y almacenarlo en una nueva variable. La sintaxis de la función límite es:

Sintaxis : DataFrame.limit(num)

Devuelve : un marco de datos con número de filas.

Luego usaremos la función subtract() para obtener las filas restantes del DataFrame inicial. La sintaxis de la función restar es:

Sintaxis : DataFrame1.subtract (DataFrame2)

Devoluciones : un nuevo DataFrame que contiene filas en DataFrame1 pero no en DataFrame2. 

Python

# Importing PySpark
import pyspark
from pyspark.sql import SparkSession
  
# Session Creation
Spark_Session = SparkSession.builder.appName(
    'Spark Session'
).getOrCreate()
  
  
# Data filled in our DataFrame
rows = [['Lee Chong Wei', 69, 'Malaysia'],
        ['Lin Dan', 66, 'China'],
        ['Srikanth Kidambi', 9, 'India'],
        ['Kento Momota', 15, 'Japan']]
  
# Columns of our DataFrame
columns = ['Player', 'Titles', 'Country']
  
# DataFrame is created
df = Spark_Session.createDataFrame(rows, columns)
  
# Getting the slices
# The first slice has 3 rows
df1 = df.limit(3)
  
# Getting the second slice by removing df1
# from df
df2 = df.subtract(df1)
  
# Printing the first slice
df1.show()
  
# Printing the second slice.
df2.show()

Producción: 

Método 2: Usando la función randomSplit()

En este método, primero crearemos un PySpark DataFrame usando createDataFrame() . Luego usaremos la función randomSplit() para obtener dos segmentos del DataFrame mientras especificamos las fracciones de filas que estarán presentes en ambos segmentos. Las filas se dividen ALEATORIAMENTE .

Sintaxis : DataFrame.randomSplit (pesos, semilla)

Parámetros

  • pesos: lista de valores dobles según los cuales se divide el DataFrame.
  • seed : la semilla para el muestreo. Este parámetro es opcional.

Devoluciones : Lista de marcos de datos divididos

Python

# Importing PySpark
import pyspark
from pyspark.sql import SparkSession
  
# Session Creation
Spark_Session = SparkSession.builder.appName(
    'Spark Session'
).getOrCreate()
  
  
# Data filled in our DataFrame
rows = [['Lee Chong Wei', 69, 'Malaysia'],
        ['Lin Dan', 66, 'China'],
        ['Srikanth Kidambi', 9, 'India'],
        ['Kento Momota', 15, 'Japan']]
  
# Columns of our DataFrame
columns = ['Player', 'Titles', 'Country']
  
#DataFrame is created
df = Spark_Session.createDataFrame(rows, columns)
  
# the first slice has 20% of the rows
# the second slice has 80% of the rows
# the data in both slices is selected randomly
df1, df2 = df.randomSplit([0.20, 0.80])
  
# Showing the first slice
df1.show()
  
# Showing the second slice
df2.show()

Producción:

Método 3: usar la función de recopilación()

En este método, primero crearemos un PySpark DataFrame usando createDataFrame() . Luego obtendremos una lista de objetos Row del DataFrame usando: 

DataFrame.collect()

Luego usaremos el corte de lista de Python para obtener dos listas de filas. Finalmente, convertimos estas dos listas de filas en PySpark DataFrames usando createDataFrame() .

Python

# Importing PySpark and Pandas
import pyspark
from pyspark.sql import SparkSession
import pandas as pd
  
# Session Creation
Spark_Session = SparkSession.builder.appName(
    'Spark Session'
).getOrCreate()
  
  
# Data filled in our DataFrame
rows = [['Lee Chong Wei', 69, 'Malaysia'],
        ['Lin Dan', 66, 'China'],
        ['Srikanth Kidambi', 9, 'India'],
        ['Kento Momota', 15, 'Japan']]
  
# Columns of our DataFrame
columns = ['Player', 'Titles', 'Country']
  
#DataFrame is created
df = Spark_Session.createDataFrame(rows, columns)
  
# getting the list of Row objects
row_list = df.collect()
  
# Slicing the Python List
part1 = row_list[:1]
part2 = row_list[1:]
  
# Converting the slices to PySpark DataFrames
slice1 = Spark_Session.createDataFrame(part1)
slice2 = Spark_Session.createDataFrame(part2)
  
# Printing the first slice
print('First DataFrame')
slice1.show()
  
# Printing the second slice
print('Second DataFrame')
slice2.show()

Producción:

Método 4: convertir PySpark DataFrame en Pandas DataFrame y usar iloc[] para cortar 

En este método, primero crearemos un PySpark DataFrame usando createDataFrame() . Luego lo convertiremos en un Pandas DataFrame usando toPandas() . Luego cortamos el DataFrame usando iloc[] con la sintaxis:

DataFrame.iloc[start_index:end_index]

La fila en end_index NO está incluida. Finalmente, convertiremos nuestros segmentos de DataFrame en PySpark DataFrame usando createDataFrame()

Python

# Importing PySpark and Pandas
import pyspark
from pyspark.sql import SparkSession
import pandas as pd
  
# Session Creation
Spark_Session = SparkSession.builder.appName(
    'Spark Session'
).getOrCreate()
  
  
# Data filled in our DataFrame
rows = [['Lee Chong Wei', 69, 'Malaysia'],
        ['Lin Dan', 66, 'China'],
        ['Srikanth Kidambi', 9, 'India'],
        ['Kento Momota', 15, 'Japan']]
  
# Columns of our DataFrame
columns = ['Player', 'Titles', 'Country']
  
# DataFrame is created
df = Spark_Session.createDataFrame(rows, columns)
  
# Converting DataFrame to pandas
pandas_df = df.toPandas()
  
# First DataFrame formed by slicing
df1 = pandas_df.iloc[:2]
  
# Second DataFrame formed by slicing
df2 = pandas_df.iloc[2:]
  
# Converting the slices to PySpark DataFrames
df1 = Spark_Session.createDataFrame(df1)
df2 = Spark_Session.createDataFrame(df2)
  
# Printing the first slice
print('First DataFrame')
df1.show()
  
# Printing the second slice
print('Second DataFrame')
df2.show()

Producción: 

Publicación traducida automáticamente

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