2016-10-10 8 views
3

Es wird versucht, Zeilen zu entfernen, in denen eine Spark-Datenrahmenspalte leere Zeichenfolgen enthält. Ursprünglich tat val df2 = df1.na.drop() aber es stellt sich heraus, dass viele dieser Werte als "" codiert werden.Entfernen leerer Zeichenfolgen aus einem Spark-Datenframe

Ich bin mit Spark 1.3.1 fest und kann auch nicht auf DSL verlassen. (Importieren von spark.implicit_ funktioniert nicht.)

+1

Was möchten Sie mit leeren Zeichenfolgen tun? die Linie fallen lassen? – eliasah

Antwort

8

Das Entfernen von Daten aus einem Datenrahmen erfordert filter().

newDF = oldDF.filter("colName != ''") 

oder bin ich Missverständnis Ihre Frage?

+0

Wie kann ich dieses Ding mit Where-Klausel schreiben –

+0

'WHERE ColName ist nicht NULL' oder' WHERE ColName ist nicht leer '... ich denke. – Kristian

+0

Oder, mit DataFrames/Datasets, 'oldDF.filter ($" colName "=! =" ")'. Vergiss nicht, 'org.apache.spark.sql.functions._ importieren org.apache.spark.sql.types._' zu importieren –

0

Ich bin auch neu zu funken Also ich weiß nicht, ob unten genannten Code komplexer ist oder nicht, aber es funktioniert.

Hier erstellen wir udf, die leere Werte in null konvertiert.

sqlContext.udf().register("convertToNull",(String abc) -> (abc.trim().length() > 0 ? abc : null),DataTypes.StringType); 

Nach oben Code können Sie "convertToNull" verwenden (funktioniert auf string) in select-Klausel und machen alle Felder null, die leer sind und als Verwendung .na(). Drop().

crimeDataFrame.selectExpr("C0","convertToNull(C1)","C2","C3").na().drop() 

Hinweis: Sie können in scala gleichen Ansatz. https://jaceklaskowski.gitbooks.io/mastering-apache-spark/content/spark-sql-udfs.html

2

Falls jemand die Datensätze nicht mit leeren Zeichenfolgen löschen möchte, sondern einfach die leeren Zeichenfolgen auf einen konstanten Wert umwandeln.

val newdf = df.na.replace(df.columns,Map("" -> "0")) // to convert blank strings to zero 
newdf.show() 
Verwandte Themen