Mit Spark 2.x benutze ich die Datenframes.Karte in einem Spark-Dataframe
val proposals = spark.read
.option("header", true)
.option("inferSchema", true)
.option("delimiter", ";")
.csv("/proposals.txt.gz")
proposals.printSchema()
, die funktioniert gut und gibt:
root
|-- MARKETCODE: string (nullable = true)
|-- REFDATE: string (nullable = true)
|-- UPDTIME: string (nullable = true)
|-- UPDTIMEMSEC: integer (nullable = true)
|-- ENDTIME: string (nullable = true)
|-- ENDTIMEMSEC: integer (nullable = true)
|-- BONDCODE: string (nullable = true)
Jetzt würde Ich mag eine Zeit in Millisekunden berechnen und somit eine Funktion geschrieben haben:
def time2usecs(time:String, msec:Int)={
val Array(hour,minute,seconds) = time.split(":").map(_.toInt)
msec + seconds.toInt*1000 + minute.toInt*60*1000 + hour.toInt*60*60*1000
}
time2usecs("08:13:44", 111)
time2usecs: (time: String, msec: Int)Int
res90: Int = 29624111
Der letzte Frieden von der puzzle das wäre so etwas wie:
proposals.withColumn("utime",
proposals.select("UPDTIME","UPDTIMEMSEC")
.map((t,tms) => time2usecs(t,tms)))
Aber ich kann nicht herausfinden, wie man den df.select(column1, column2).map(...)
Teil macht.