2017-10-12 19 views
0

Mon jeu de données a des colonnes nommées « clé (chaîne), la valeur (long) »Comment transformer <Row> ensemble de données à un autre

La valeur de la clé de la colonne comme prefix.20171012.111.2222, et la valeur de la valeur de la colonne comme 9999 Je veux transformer l'ensemble de données en un nouveau qui divise la clé colmun à d'autres comme "day, rt, item_id, value".

comment le faire, merci beaucoup

+0

Peut-être que cette question peut vous aider: https://stackoverflow.com/questions/39255973 – Shaido

+0

Salut, Shaido. merci pour votre réponse rapide, je l'essaie. –

Répondre

0
// input ds looks like this 
+--------+-----+ 
|  key|value| 
+--------+-----+ 
|20171011| 9999| 
+--------+-----+ 

//import the functions you need 
import org.apache.spark.sql.functions.{to_date, month, year, dayofmonth} 

// ds2 
val ds2 = ds.withColumn("date", to_date($"key", "yyyyMMdd")) 

// ds2.show() 
+--------+-----+----------+ 
|  key|value|  date| 
+--------+-----+----------+ 
|20171011| 9999|2017-10-11| 
+--------+-----+----------+ 

// ds3 
val ds3 = ds2.withColumn("Month", month($"date")) 
    .withColumn("Year", year($"date")) 
    .withColumn("Date", dayofmonth($"date")) 

// ds3.show() 
+--------+-----+----+-----+----+ 
|  key|value|Date|Month|Year| 
+--------+-----+----+-----+----+ 
|20171011| 9999| 11| 10|2017| 
+--------+-----+----+-----+----+