validacion usando una seleccionar según para multiple listas listado lista extraer extrae desplegables desplegable datos condición columnas buscav autocompletar apache-spark apache-spark-sql spark-dataframe

apache-spark - usando - lista desplegable excel autocompletar



Upacking una lista para seleccionar varias columnas de un marco de datos de chispa (5)

Otra opción que acabo de aprender.

import org.apache.spark.sql.functions.col val columns = Seq[String]("col1", "col2", "col3") val colNames = columns.map(name => col(name)) val df = df.select(colNames:_*)

Tengo un marco de datos de chispa df . ¿Hay alguna forma de seleccionar algunas columnas usando una lista de estas columnas?

scala> df.columns res0: Array[String] = Array("a", "b", "c", "d")

Sé que puedo hacer algo como df.select("b", "c") . Pero supongamos que tengo una lista que contiene algunos nombres de columna val cols = List("b", "c") , ¿hay alguna manera de pasar esto a df.select? df.select(cols) arroja un error. Algo así como df.select(*cols) como en python


Puede encasillar Cadena para centellear columna de esta manera:

import org.apache.spark.sql.functions._ df.select(cols.map(col): _*)


Puede pasar argumentos de tipo Column* para select :

val df = spark.read.json("example.json") val cols: List[String] = List("a", "b") //convert string to Column val col: List[Column] = cols.map(df(_)) df.select(col:_*)


Utilice df.select(cols.head, cols.tail: _*)

Déjame saber si funciona :)

Explicación de @Ben :

La clave es la firma del método de seleccionar:

select(col: String, cols: String*)

La entrada cols:String* toma una cantidad variable de argumentos. :_* descomprime argumentos para que puedan ser manejados por este argumento. Muy similar al desempaquetado en python con *args . Vea here y here para otros ejemplos.


puedes hacer esto

String[] originCols = ds.columns(); ds.selectExpr(originCols)

spark selectExp código fuente

/** * Selects a set of SQL expressions. This is a variant of `select` that accepts * SQL expressions. * * {{{ * // The following are equivalent: * ds.selectExpr("colA", "colB as newName", "abs(colC)") * ds.select(expr("colA"), expr("colB as newName"), expr("abs(colC)")) * }}} * * @group untypedrel * @since 2.0.0 */ @scala.annotation.varargs def selectExpr(exprs: String*): DataFrame = { select(exprs.map { expr => Column(sparkSession.sessionState.sqlParser.parseExpression(expr)) }: _*) }