Je voudrais accéder aux min et max d'une colonne spécifique de mon cadre de données mais je n'ai pas l'en-tête de la colonne, mais son numéro, alors je devrais utiliser scala??
peut-être quelque chose comme ceci:
val q = nextInt(ncol) //we pick a random value for a column number
col = df(q)
val minimum = col.min()
Désolé si cela ressemble à une question idiote mais je n’ai trouvé aucune information sur SO à propos de cette question: /
Pourquoi ne pas obtenir le nom de la colonne à partir des métadonnées:
val selectedColumnName = df.columns(q) //pull the (q + 1)th column from the columns array
df.agg(min(selectedColumnName), max(selectedColumnName))
Vous pouvez utiliser la correspondance de modèle tout en assignant une variable:
import org.Apache.spark.sql.functions.{min, max}
import org.Apache.spark.sql.Row
val Row(minValue: Double, maxValue: Double) = df.agg(min(q), max(q)).head
Où q est un Column
ou un nom de colonne (String). En supposant que votre type de données est Double
.
Vous pouvez utiliser le numéro de colonne pour extraire d’abord les noms de colonne (en indexant df.columns
), Puis agrégé pour utiliser les noms de colonne:
val df = Seq((2.0, 2.1), (1.2, 1.4)).toDF("A", "B")
// df: org.Apache.spark.sql.DataFrame = [A: double, B: double]
df.agg(max(df(df.columns(1))), min(df(df.columns(1)))).show
+------+------+
|max(B)|min(B)|
+------+------+
| 2.1| 1.4|
+------+------+
Voici un moyen direct d'obtenir le min et le max d'un dataframe avec des noms de colonnes:
val df = Seq((1, 2), (3, 4), (5, 6)).toDF("A", "B")
df.show()
/*
+---+---+
| A| B|
+---+---+
| 1| 2|
| 3| 4|
| 5| 6|
+---+---+
*/
df.agg(min("A"), max("A")).show()
/*
+------+------+
|min(A)|max(A)|
+------+------+
| 1| 5|
+------+------+
*/
Si vous voulez obtenir les valeurs min et max sous forme de variables séparées, vous pouvez convertir le résultat de agg()
ci-dessus en un Row
et utiliser Row.getInt(index)
pour obtenir la colonne. valeurs de la Row
.
val min_max = df.agg(min("A"), max("A")).head()
// min_max: org.Apache.spark.sql.Row = [1,5]
val col_min = min_max.getInt(0)
// col_min: Int = 1
val col_max = min_max.getInt(1)
// col_max: Int = 5