2017-02-03 7 views
2

Ich versuche Spark zu lernen. Ich habe eine org.apache.spark.sql.Column, die ich als DataFrame einlesen. Und dann versuche ich es zu filtern, um eine Bedingung auf einer Spalte:Einen DataTypes.DateType definieren

val resultDataFrame = dataFrame.filter(col("DATECOL") >= date) 

Die DATECOL als DataTypes.DateType in den Datenrahmen gelesen werden. date ist eine Variable, die ich hardcodieren muss.

Was ich versuche, ist, herauszufinden, wie kann ich definieren date das heißt, wie kann ich eine Instanz von DataTypes.DateType oder konvertieren erstellen, um es von einem String oder so, so dass ich den obigen Ausdruck ausgeführt werden kann. Ich habe versucht, eine String und es gibt keinen Fehler, aber es gibt keine Ergebnisse, wo es sollte.

Antwort

3

können Sie es eine java.sql.Date:

val df = Seq(("2016-10-10", 2), ("2017-02-02", 10)).toDF("DATECOL", "value") 

val df1 = df.withColumn("DATECOL", to_date($"DATECOL")) 
// df1: org.apache.spark.sql.DataFrame = [DATECOL: date, value: int] 

df1.show 
+----------+-----+ 
| DATECOL|value| 
+----------+-----+ 
|2016-10-10| 2| 
|2017-02-02| 10| 
+----------+-----+ 

val date = java.sql.Date.valueOf("2016-11-01") 
// date: java.sql.Date = 2016-11-01 

df1.filter($"DATECOL" > date).show 
+----------+-----+ 
| DATECOL|value| 
+----------+-----+ 
|2017-02-02| 10| 
+----------+-----+ 
+0

Ah, das Java Datum verwenden, dank dachte! – rgamber

+1

Halt, ein 'String' funktioniert auch! Ich glaube, ich habe einen Fehler gemacht, als ich die Ergebnisse früher betrachtete. – rgamber

+0

Hmm. Eine Reihe von Standardformaten funktioniert, dies ist nur für den Fall, dass Sie einige [Sonderfall] haben (http://stackoverflow.com/questions/41703517/create-a-new-column-based-on-date-checking) . – Psidom

Verwandte Themen