¿Cómo tomar una fila aleatoria de un PySpark DataFrame?

En este artículo, vamos a aprender cómo tomar una fila aleatoria de un PySpark DataFrame en el lenguaje de programación Python.

Método 1: método PySpark sample()

PySpark proporciona varios métodos de muestreo que se utilizan para devolver una muestra del PySpark DataFrame dado.

Aquí están los detalles del método sample() : 

Sintaxis : DataFrame.sample(withReplacement,fractionfloat,seed)

Devuelve un subconjunto del DataFrame.

Parámetros

withReplacement : bool, opcional

Muestra con reemplazo o no (por defecto Falso).

fracción flotante : opcional

Fracción de filas a generar

semilla : int, opcional

Se utiliza para reproducir el mismo muestreo aleatorio.

Ejemplo :

En este ejemplo, necesitamos agregar una fracción del tipo de datos flotantes aquí del rango [0.0,1.0]. Usando la fórmula: 

Número de filas necesarias = Fracción * Número total de filas

Podemos decir que la fracción que necesitamos es 1/número total de filas .

Python

# importing the library and
# its SparkSession functionality
import pyspark
from pyspark.sql import SparkSession
  
# creating a session to make DataFrames
random_row_session = SparkSession.builder.appName(
    'Random_Row_Session'
).getOrCreate()
  
# Pre-set data for our DataFrame
data = [['a', 1], ['b', 2], ['c', 3], ['d', 4]]
columns = ['Letters', 'Position']
  
# Creating a DataFrame
df = random_row_session.createDataFrame(data,
                                        columns)
  
# Printing the DataFrame
df.show()
  
# Taking a sample of df and storing it in #df2
# please not that the second argument here is a fraction
# of the data set we need(fraction is in float)
# number of rows = fraction * total number of rows
df2 = df.sample(False, 1.0/len(df.collect()))
  
# printing the sample row which is a DataFrame
df2.show()

Salida

+-------+--------+
|Letters|Position|
+-------+--------+
|      a|       1|
|      b|       2|
|      c|       3|
|      d|       4|
+-------+--------+

+-------+--------+
|Letters|Position|
+-------+--------+
|      b|       2|
+-------+--------+

Método 2: Usar el método takeSample()

Primero convertimos PySpark DataFrame en un RDD. El conjunto de datos distribuido resistente (RDD) es la estructura de datos más simple y fundamental en PySpark. Son colecciones inmutables de datos de cualquier tipo de datos.

Podemos obtener RDD de un Data Frame usando DataFrame.rdd y luego usar el método takeSample()

Sintaxis de takeSample() : 

tomarMuestra(conReemplazo, num, semilla=Ninguno) 

Parámetros

withReplacement : bool, opcional

Muestra con reemplazo o no (por defecto Falso).

número : int

el número de valores de muestra

semilla : int, opcional

Se utiliza para reproducir el mismo muestreo aleatorio.

Devoluciones : devuelve el número de filas del DataFrame.

Ejemplo : En este ejemplo, estamos usando el método takeSample() en el RDD con el parámetro num = 1 para obtener un objeto Row . num es el número de muestras.

Python

# importing the library and
# its SparkSession functionality
import pyspark
from pyspark.sql import SparkSession
from pyspark.sql import Row
  
# creating a session to make DataFrames
random_row_session = SparkSession.builder.appName(
    'Random_Row_Session'
).getOrCreate()
  
# Pre-set data for our DataFrame
data = [['a', 1], ['b', 2], ['c', 3], ['d', 4]]
columns = ['Letters', 'Position']
  
# Creating a DataFrame
df = random_row_session.createDataFrame(data,
                                        columns)
  
# Printing the DataFrame
df.show()
  
# Getting RDD object from the DataFrame
rdd = df.rdd
  
# Taking a single sample of from the RDD
# Putting num = 1 in the takeSample() function
rdd_sample = rdd.takeSample(withReplacement=False,
                            num=1)
print(rdd_sample)

Salida

+-------+--------+
|Letters|Position|
+-------+--------+
|      a|       1|
|      b|       2|
|      c|       3|
|      d|       4|
+-------+--------+

[Row(Letters='c', Position=3)]

Método 3: Convierta PySpark DataFrame en Pandas DataFrame y use el método sample()

Podemos usar la función toPandas() para convertir un PySpark DataFrame en un Pandas DataFrame. Este método solo debe usarse si se espera que el DataFrame de Pandas resultante sea pequeño, ya que todos los datos se cargan en la memoria del controlador. Este es un método experimental .

Luego usaremos el método sample() de la biblioteca Pandas. Devuelve una muestra aleatoria de un eje de Pandas DataFrame.

Sintaxis : PandasDataFrame.sample(n=Ninguno, frac=Ninguno, replace=False, weights=Ninguno, random_state=Ninguno, axis=Ninguno, ignore_index=False)

Ejemplo :

En este ejemplo, convertiremos nuestro PySpark DataFrame en un Pandas DataFrame y usaremos la función Pandas sample() en él. 

Python

# importing the library and
# its SparkSession functionality
import pyspark
from pyspark.sql import SparkSession
  
# creating a session to make DataFrames
random_row_session = SparkSession.builder.appName(
    'Random_Row_Session'
).getOrCreate()
  
# Pre-set data for our DataFrame
data = [['a', 1], ['b', 2], ['c', 3], ['d', 4]]
columns = ['Letters', 'Position']
  
# Creating a DataFrame
df = random_row_session.createDataFrame(data,
                                        columns)
  
# Printing the DataFrame
df.show()
  
# Converting the DataFrame to
# a Pandas DataFrame and taking a sample row
pandas_random = df.toPandas().sample()
  
# Converting the sample into
# a PySpark DataFrame
df_random = random_row_session.createDataFrame(pandas_random)
  
# Showing our randomly selected row
df_random.show()

Salida

+-------+--------+
|Letters|Position|
+-------+--------+
|      a|       1|
|      b|       2|
|      c|       3|
|      d|       4|
+-------+--------+

+-------+--------+
|Letters|Position|
+-------+--------+
|      b|       2|
+-------+--------+

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 *