En este artículo, vamos a aprender cómo obtener un valor del objeto Row en PySpark DataFrame.
Método 1: Usar el método mágico __getitem()__
Crearemos un Spark DataFrame con al menos una fila usando createDataFrame(). Luego obtenemos un objeto Row de una lista de objetos de fila devueltos por DataFrame.collect(). Luego usamos el método mágico __getitem()__ para obtener un elemento de un nombre de columna en particular. A continuación se muestra la sintaxis.
Sintaxis : DataFrame.__getitem__(‘Column_Name’)
Devuelve : valor correspondiente al nombre de la columna en el objeto Fila
Python
# library import import pyspark from pyspark.sql import SparkSession from pyspark.sql import Row # Session Creation random_value_session = SparkSession.builder.appName( 'Random_Value_Session' ).getOrCreate() # Data filled in our DataFrame # 5 rows below rows = [['All England Open', 'March', 'Super 1000'], ['Malaysia Open', 'January', 'Super 750'], ['Korea Open', 'April', 'Super 500'], ['Hylo Open', 'November', 'Super 100'], ['Spain Masters', 'March', 'Super 300']] # Columns of our DataFrame columns = ['Tournament', 'Month', 'Level'] #DataFrame is created dataframe = random_value_session.createDataFrame(rows, columns) # Showing the DataFrame dataframe.show() # getting list of rows using collect() row_list = dataframe.collect() # Printing the first Row object # from which data is extracted print(row_list[0]) # Using __getitem__() magic method # To get value corresponding to a particular # column print(row_list[0].__getitem__('Level')) print(row_list[0].__getitem__('Tournament')) print(row_list[0].__getitem__('Level')) print(row_list[0].__getitem__('Month'))
Producción:
+----------------+--------+----------+ | Tournament| Month| Level| +----------------+--------+----------+ |All England Open| March|Super 1000| | Malaysia Open| January| Super 750| | Korea Open| April| Super 500| | Hylo Open|November| Super 100| | Spain Masters| March| Super 300| +----------------+--------+----------+ Row(Tournament='All England Open', Month='March', Level='Super 1000') Super 1000 All England Open Super 1000 March
Método 2: Usar el método asDict()
Crearemos un Spark DataFrame con al menos una fila usando createDataFrame() . Luego obtenemos un objeto Row de una lista de objetos de fila devueltos por DataFrame.collect() . Luego usamos el método asDict() para obtener un diccionario donde los nombres de columna son claves y sus valores de fila son valores de diccionario. A continuación se muestra la sintaxis:
Sintaxis : DataFrame.asDict (recursivo)
Parámetros :
recursivo: bool: devuelve filas anidadas como dict. El valor predeterminado es Falso .
Luego obtenemos fácilmente el valor del diccionario usando DictionaryName[‘key_name’].
Python
# library imports are done here import pyspark from pyspark.sql import SparkSession # Session Creation random_value_session = SparkSession.builder.appName( 'Random_Value_Session' ).getOrCreate() # Data filled in our DataFrame # Rows below will be filled rows = [['French Open', 'October', 'Super 750'], ['Macau Open', 'November', 'Super 300'], ['India Open', 'January', 'Super 500'], ['Odisha Open', 'January', 'Super 100'], ['China Open', 'November', 'Super 1000']] # DataFrame Columns columns = ['Tournament', 'Month', 'Level'] # DataFrame creation dataframe = random_value_session.createDataFrame(rows, columns) # DataFrame print dataframe.show() # list of rows using collect() row_list = dataframe.collect() # Printing the second Row object # from which we will read data print(row_list[1]) print() # Printing dictionary to make # things more clear print(row_list[1].asDict()) print() # Using asDict() method to convert row object # into a dictionary where the column names are keys # Using column names as keys to get respective values print(row_list[1].asDict()['Tournament']) print(row_list[1].asDict()['Month']) print(row_list[1].asDict()['Level'])
Producción :
+-----------+--------+----------+ | Tournament| Month| Level| +-----------+--------+----------+ |French Open| October| Super 750| | Macau Open|November| Super 300| | India Open| January| Super 500| |Odisha Open| January| Super 100| | China Open|November|Super 1000| +-----------+--------+----------+ Row(Tournament='Macau Open', Month='November', Level='Super 300') {'Tournament': 'Macau Open', 'Month': 'November', 'Level': 'Super 300'} Macau Open November Super 300
Método 3: Imaginar el objeto Fila como una lista
Aquí imaginaremos un objeto Fila como una Lista de Python y realizaremos operaciones. Crearemos un Spark DataFrame con al menos una fila usando createDataFrame() . Luego obtenemos un objeto Row de una lista de objetos de fila devueltos por DataFrame.collect() . Como estamos imaginando el objeto Fila como una Lista, solo usamos:
Sintaxis : RowObject[‘Column_name’]
Devuelve : valor correspondiente al nombre de la columna en el objeto de fila.
Python
# library imports are done here import pyspark from pyspark.sql import SparkSession # Session Creation random_value_session = SparkSession.builder.appName( 'Random_Value_Session' ).getOrCreate() # Data filled in our DataFrame # Rows below will be filled rows = [['Denmark Open', 'October', 'Super 1000'], ['Indonesia Open', 'June', 'Super 1000'], ['Korea Open', 'April', 'Super 500'], ['Japan Open', 'August', 'Super 750'], ['Akita Masters', 'July', 'Super 100']] # DataFrame Columns columns = ['Tournament', 'Month', 'Level'] # DataFrame creation dataframe = random_value_session.createDataFrame(rows, columns) # DataFrame print dataframe.show() # list of rows using collect() row_list = dataframe.collect() # Lets take the third Row object row_object = row_list[2] # If we imagine it as a Python List, # We can get the first value of the list, # index 0, let's try it print(row_object[0]) # We got the value of column at index 0 # which is - 'Tournament' # A few more examples print(row_list[4][0]) print(row_list[3][1]) print(row_list[4][2])
Producción:
+--------------+-------+----------+ | Tournament| Month| Level| +--------------+-------+----------+ | Denmark Open|October|Super 1000| |Indonesia Open| June|Super 1000| | Korea Open| April| Super 500| | Japan Open| August| Super 750| | Akita Masters| July| Super 100| +--------------+-------+----------+ Korea Open Akita Masters August Super 100
Publicación traducida automáticamente
Artículo escrito por pranavhfs1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA