Ich habe ein Datenframe in Spark/Scala, die 100 von Spalte hat. Viele der anderen Spalten haben viele Nullwerte. Ich würde gerne die Spalten mit mehr als 90% Nullen finden und sie dann aus meinem Datenrahmen löschen. Wie kann ich das in Spark/Scala machen?So finden Sie Spalten mit vielen Nullen in Spark/Scala
0
A
Antwort
2
org.apache.spark.sql.functions.array
und udf
Willen Hilfe.
import spark.implicits._
import org.apache.spark.sql.functions._
val df = sc.parallelize[(String, String, String, String, String, String, String, String, String, String)](
Seq(
("a", null, null, null, null, null, null, null, null, null), // 90%
("b", null, null, null, null, null, null, null, null, ""), // 80%
("c", null, null, null, null, null, null, null, "", "") // 70%
)
).toDF("c1", "c2", "c3", "c4", "c5", "c6", "c7", "c8", "c9","c10")
// count nulls then check the condition
val check_90_null = udf { xs: Seq[String] =>
xs.count(_ == null) >= (xs.length * 0.9)
}
// all columns as array
val columns = array(df.columns.map(col): _*)
// filter out
df.where(not(check_90_null(columns)))
.show()
zeigt
+---+----+----+----+----+----+----+----+----+---+
| c1| c2| c3| c4| c5| c6| c7| c8| c9|c10|
+---+----+----+----+----+----+----+----+----+---+
| b|null|null|null|null|null|null|null|null| |
| b|null|null|null|null|null|null|null| | |
+---+----+----+----+----+----+----+----+----+---+
die der Reihe gestartet "a" wird ausgeschlossen.
2
Angenommen, Sie einen Datenrahmen wie dieses:
val df = Seq((Some(1.0), Some(2), Some("a")),
(null, Some(3), null),
(Some(2.0), Some(4), Some("b")),
(null, null, Some("c"))
).toDF("A", "B", "C")
df.show
+----+----+----+
| A| B| C|
+----+----+----+
| 1.0| 2| a|
|null| 3|null|
| 2.0| 4| b|
|null|null| c|
+----+----+----+
Count NULL agg
Funktion und Filter Spalten basierend auf den Null-Zählungen und Schwellen, setzen sie 1, hier zu sein mit:
val null_thresh = 1 // if you want to use percentage
// val null_thresh = df.count() * 0.9
val to_keep = df.columns.filter(
c => df.agg(
sum(when(df(c).isNull, 1).otherwise(0)).alias(c)
).first().getLong(0) <= null_thresh
)
df.select(to_keep.head, to_keep.tail: _*).show
und Sie erhalten:
+----+----+
| B| C|
+----+----+
| 2| a|
| 3|null|
| 4| b|
|null| c|
+----+----+
Verwandte Themen
- 1. So finden Sie Dateien mit vielen Duplikaten in Eclipse
- 2. Wählen Sie Spalten mit vielen Beobachtungen
- 3. So finden Sie Spalten mit eindeutigen Werten in einer Tabelle
- 4. So löschen Sie Zeilen mit Nullen in einer Spalte pyspark
- 5. JPA Kriterien: in Klausel mit vielen Spalten
- 6. Drop Spalten mit mehr als 70% Nullen
- 7. So ersetzen Sie alle Nullen in Javascript
- 8. Mysql Redesign-Tabelle mit vielen Spalten
- 9. Finden Sie sql verbundene Komponente zwischen vielen zu vielen Entitäten
- 10. Finden Sie Zeilen, die nur Nullen enthalten
- 11. So finden Sie die in einer gespeicherten Prozedur verwendeten Spalten
- 12. So finden Sie Dubletten in 2 Spalten nicht 1
- 13. So spalten Sie Vektor in Spalten - mit PySpark
- 14. So finden Sie eindeutige Feldwerte aus zwei Spalten im Datenrahmen
- 15. Filtern Sie zwei große Dateien mit vielen Spalten
- 16. In sql So finden Sie max aus den Spalten
- 17. Matlab Finden Anzahl aufeinanderfolgender Nullen
- 18. So füllen Sie Nullen in Spark mit einer "When" -Anweisung
- 19. So ziehen Sie die Daten aus einer Tabelle mit Spalten, die Nullen in die Tabelle der nicht Null-fähigen Spalten
- 20. Finden Sie aufeinanderfolgende Nullen in Python, basierend auf Zeit
- 21. Große Tabelle mit vielen "Ausnahme" -Spalten
- 22. Finden zwei Nullen einer Funktion mit Python
- 23. Rückgängig machen Umformatieren mit beliebig vielen Spalten
- 24. So erstellen Sie ein Punktdiagramm mit vielen Werten in ggplot2
- 25. Erstellen Sie einfachen Balkendiagramm von Datenrahmen mit vielen Spalten
- 26. So finden Sie mehrere Duplikate zwischen zwei Spalten
- 27. So exportieren Sie CSV mit mehreren Spalten in Julia
- 28. Inseln von Nullen in einer Sequenz finden
- 29. Auswählen von vielen beliebigen Spalten in Slick
- 30. Finden Sie die Nachbarn aller Nullen Elemente in einer Matrix