Comment obtenir tous les noms de colonnes dans un spark dataframe dans une variable Seq.
Données d'entrée et schéma
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)
J'ai besoin de stocker tous les noms de colonnes dans une variable à l'aide de la programmation scala. J'ai essayé comme ci-dessous, mais cela ne fonctionne pas.
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))
Production attendue:
val selectColumns = Seq(
col("KEY1"),
col("KEY2"),
col("ID")
)
selectColumns: Seq[org.Apache.spark.sql.Column] = List(KEY1, KEY2, ID)
Vous pouvez utiliser la commande suivante:
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)
val selectColumns = dataset1.columns.toList.map(col(_))
J'utilise la propriété des colonnes comme ça
val cols = dataset1.columns.toSeq
puis si vous sélectionnez toutes les colonnes plus tard dans l'ordre de la séquence de la tête à la queue, vous pouvez utiliser
val orderedDF = dataset1.select(cols.head, cols.tail:_ *)
nous pouvons obtenir les noms de colonnes d'un ensemble de données/table dans une variable de séquence de la manière suivante.
de Dataset,
val col_seq:Seq[String] = dataset.columns.toSeq
de la table,
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