Saltar al contenido

Marco de datos de Spark: recopilar () vs seleccionar ()

Solución:

Acciones vs Transformaciones

  • Recopilar (acción): devuelve todos los elementos del conjunto de datos como una matriz en el programa controlador. Esto suele ser útil después de un filtro u otra operación que devuelve un subconjunto suficientemente pequeño de datos.

Spark-sql doc

seleccionar (* cols) (transformación): proyecta un conjunto de expresiones y devuelve un nuevo DataFrame.

Parámetros: cols – lista de nombres de columna (cadena) o expresiones (columna). Si uno de los nombres de columna es ‘*’, esa columna se expande para incluir todas las columnas en el DataFrame actual. **

df.select('*').collect()
[Row(age=2, name=u'Alice'), Row(age=5, name=u'Bob')]
df.select('name', 'age').collect()
[Row(name=u'Alice', age=2), Row(name=u'Bob', age=5)]
df.select(df.name, (df.age + 10).alias('age')).collect()
[Row(name=u'Alice', age=12), Row(name=u'Bob', age=15)]

Ejecución select(column-name1,column-name2,etc) en un marco de datos, devuelve un nuevo marco de datos que contiene solo las columnas que se seleccionaron en el select() función.

por ejemplo, asumiendo df tiene varias columnas que incluyen “nombre” y “valor” y algunas otras.

df2 = df.select("name","value")

df2 contendrá solo dos columnas (“nombre” y “valor”) de todas las columnas de df

df2 como resultado de select estará en los ejecutores y no en el controlador (como en el caso de usar collect())

guía-de-programación-sql

df.printSchema()
# root
# |-- age: long (nullable = true)
# |-- name: string (nullable = true)

# Select only the "name" column
df.select("name").show()
# +-------+
# |   name|
# +-------+
# |Michael|
# |   Andy|
# | Justin|
# +-------+

Puedes correr collect() en un marco de datos (documentos de chispa)

>>> l = [('Alice', 1)]
>>> spark.createDataFrame(l).collect()
[Row(_1=u'Alice', _2=1)]
>>> spark.createDataFrame(l, ['name', 'age']).collect()
[Row(name=u'Alice', age=1)]

documentos de chispa

Para imprimir todos los elementos en el controlador, se puede usar el método collect () para llevar primero el RDD al nodo del controlador, así: rdd.collect (). Foreach (println). Sin embargo, esto puede hacer que el controlador se quede sin memoria, porque collect () recupera todo el RDD en una sola máquina; si solo necesita imprimir algunos elementos del RDD, un enfoque más seguro es usar take (): rdd.take (100) .foreach (println).

vocación select El resultado es lazy evaluación: por ejemplo:

val df1 = df.select("col1")
val df2 = df1.filter("col1 == 3")

ambas declaraciones anteriores crean una ruta perezosa que se ejecutará cuando llame a la acción en eso df, tal como show, collect etc.

val df3 = df2.collect()

usar .explain al final de su transformación para seguir su plan aquí hay información más detallada Transformaciones y Acciones

Select se utiliza para proyectar algunos o todos los campos de un dataframe. No te dará un value como una salida pero una nueva dataframe. Es un transformation.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *