通過給出更多詳細信息,重新構建了該問題。Spark Scala中從字符串到日期的轉換
我有一個數據幀「dailyshow」架構是:
scala> dailyshow.printSchema
root
|-- year: integer (nullable = true)
|-- occupation: string (nullable = true)
|-- showdate: string (nullable = true)
|-- group: string (nullable = true)
|-- guest: string (nullable = true)
樣本數據是:
scala> dailyshow.show(5)
+----+------------------+---------+------+----------------+
|year| occupation| showdate| group| guest|
+----+------------------+---------+------+----------------+
|1999| actor|1/11/1999|Acting| Michael J. Fox|
|1999| Comedian|1/12/1999|Comedy| Sandra Bernhard|
|1999|television actress|1/13/1999|Acting| Tracey Ullman|
|1999| film actress|1/14/1999|Acting|Gillian Anderson|
|1999| actor|1/18/1999|Acting|David Alan Grier|
+----+------------------+---------+------+----------------+
下面碼被用於轉化和產生該返回的時間之間的頂部5的職業結果期間「01/11/1999」和「06/11/1999」
scala> dailyshow.
withColumn("showdate",to_date(unix_timestamp(col("showdate"),"MM/dd/yyyy").
cast("timestamp"))).
where((col("showdate") >= "1999-01-11") and (col("showdate") <= "1999-06-11")).
groupBy(col("occupation")).agg(count("*").alias("count")).
orderBy(desc("count")).
limit(5).show
+------------------+-----+
| occupation|count|
+------------------+-----+
| actor| 29|
| actress| 20|
| comedian| 4|
|television actress| 3|
| stand-up comedian| 2|
+------------------+-----+
我的問題我當使用RDD時如何編碼並得到相同的結果?
scala> dailyshow.first
res12: org.apache.spark.sql.Row = [1999,actor,1/11/1999,Acting,Michael J. Fox]
我用SimpleDateFormat
解析字符串到日期的DataFrame
。
下面是代碼:
val format = new java.text.SimpleDateFormat("MM/dd/yyyy")
dailyshow.
map(x => x.mkString(",")).
map(x => x.split(",")).
map(x => format.parse(x(2))).first // returns Mon Jan 11 00:00:00 PST 1999
是什麼'dailyshow'包含哪些內容?你的前兩張地圖看起來像是互相取消了。 – philantrovert
@philantrovert dailyshow是一個數據框。 前2個映射表用於將DF轉換爲RDD,因爲DF以「[」開頭並以「]」結尾。 。爲了避免提取這2個字符,使用前兩個地圖。 – Jayson
'datashow'中的示例數據和預期輸出將對回答者有很大的幫助。如果可以,請添加,謝謝。 – philantrovert