2016-08-12 2 views
2

Ich muss bestimmte Spalten in einem Datenrahmen vor dem Speichern von Daten in hdfs validieren. Ich möchte wissen, ob es eine elegante und effektive Art und Weise ist dies in pyspark 1.5.2/Python 2.7Effektive Möglichkeit zur Validierung von Feldwerten Spark

Zum Beispiel zu tun, sage ich folgende Daten

+-----+---+ 
| a| b| 
+-----+---+ 
|"foo"|123| 
+-----+---+ 

ich, dass jeder sicherstellen möchten, Der Wert für die Spalte a ist nicht länger als 3 Zeichen und die Spalte b ist <= 500.

Mein aktueller Gedanke ist, ein udf zu schreiben, das ein einfaches if/else tut, und einen bestimmten Wert zurückgibt, dann basierend auf diesen Ergebnissen entscheidet, ob der Job fehlschlägt oder nicht. Bei vielen Daten bin ich jedoch besorgt, dass es langsam oder zumindest sehr schwer ist. Gibt es einen bereits etablierten Weg, dies bereits in Spark zu tun? Oder gibt es irgendeine populäre Strategie dafür? Ich konnte selbst nicht viele Informationen zu diesem Thema finden.

Ich bin auch offen für die Vermeidung von Funken, wenn es einen besseren Weg gibt, wäre jeder gute Vorschlag sehr hilfreich.

Antwort

3

Sie können mehrere vordefinierte functions verwenden, um Ihr Ziel zu erreichen.

from pyspark.sql.functions import * 

df = sc.parallelize([("fo", 100),("alb", 501),("roger", -10),("francis", 1000)]).toDF(["name", "salary"]) 

df.select("*", ((length("name") < lit(3)) & (col("salary") <= lit(500))).alias("evaluation")).show() 

+-------+------+----------+ 
| name|salary|evaluation| 
+-------+------+----------+ 
|  fo| 100|  true| 
| alb| 501|  false| 
| roger| -10|  false| 
|francis| 1000|  false| 
+-------+------+----------+ 
Verwandte Themen