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