Cómo obtener todos los nombres de columna en una chispa en un dataframe Seq variable .

Datos de entrada & Esquema

val dataset1 = Seq(("66", "a", "4"), ("67", "a", "0"), ("70", "b", "4"), ("71", "d", "4")).toDF("KEY1", "KEY2", "ID")

dataset1.printSchema()
root
|-- KEY1: string (nullable = true)
|-- KEY2: string (nullable = true)
|-- ID: string (nullable = true)

Necesito almacenar todos los nombres de columna en la variable usando scala de programación . He intentado de la siguiente , pero no su trabajo.

val selectColumns = dataset1.schema.fields.toSeq

selectColumns: Seq[org.apache.spark.sql.types.StructField] = WrappedArray(StructField(KEY1,StringType,true),StructField(KEY2,StringType,true),StructField(ID,StringType,true))

Resultado esperado:

val selectColumns = Seq(
  col("KEY1"),
  col("KEY2"),
  col("ID")
)

selectColumns: Seq[org.apache.spark.sql.Column] = List(KEY1, KEY2, ID)
InformationsquelleAutor RaAm | 2017-10-15

4 Comentarios

  1. 12

    Puede utilizar el siguiente comando:

    val selectColumns = dataset1.columns.toSeq

    scala> val dataset1 = Seq(("66", "a", "4"), ("67", "a", "0"), ("70", "b", "4"), ("71", "d", "4")).toDF("KEY1", "KEY2", "ID")
    dataset1: org.apache.spark.sql.DataFrame = [KEY1: string, KEY2: string ... 1 more field]
    
    scala> val selectColumns = dataset1.columns.toSeq
    selectColumns: Seq[String] = WrappedArray(KEY1, KEY2, ID)
    • la salida debe ser Seq[org.apache.chispa.sql.Columna] , en lugar de la Lista[Cadena].
    • ¿qué te gustaría hacer con la salida de los nombres de columna? ¿por qué necesita ser de tipo Columnas?
    • Necesito esta lógica a ser implementado por resultado intermedio.así que necesito que la salida de las columnas
  2. 3

    Yo uso las columnas de la propiedad como

    val cols = dataset1.columns.toSeq

    y si después de seleccionar todas las columnas más tarde, en el orden de la Secuencia de cabeza a cola, puede utilizar

    val orderedDF = dataset1.select(cols.head, cols.tail:_ *)
  3. 1

    podemos obtener los nombres de las columnas de un conjunto de datos /tabla en una variable de Secuencia en las siguientes maneras.

    de conjunto de datos,

    val col_seq:Seq[String] = dataset.columns.toSeq

    de la tabla,

    val col_seq:Seq[String] = spark.table("tablename").columns.toSeq
                               or
    val col_seq:Seq[String] = spark.catalog.listColumns("tablename").select('name).collect.map(col=>col.toString).toSeq

Dejar respuesta

Please enter your comment!
Please enter your name here