spark-shell Unix时间戳转换&将文件保存为其他格式

时间:2016-12-07 06:41:35

标签: scala apache-spark apache-spark-sql

我刚开始学习Spark和Scala。我想知道如何在Unix时间戳中使用这种转换方法到spark-shell中的数据

scala> val allrecords = sqlContext.sql("SELECT * FROM table")
scala> allrecords.show()
+----------+------------+
| timestamp|endtimestamp|
+----------+------------+
|1462627176|  1462635408|
|1462627742|  1462635629|
|1462628184|  1462635203|

它只显示前20行。为什么spark-shell只显示20行?是否可以消除此限制?

还有一个问题,如何将结果保存到我的主目录和HDFS位置?

3 个答案:

答案 0 :(得分:0)

默认情况下,show()方法为show(20,truncate=True),其中第一个参数是要显示的行数,第二个参数将输出截断为20行。

因此,您只需使用show(<number of rows you want to see>)show(<any number of rows>,False)即可显示所有行 要保存dataframe,您可以使用
allrecords.write().format("parquet").save("HDFSPath")
allrecords.write.parquet("HDFSPath_filename.parquet")

答案 1 :(得分:0)

它不是spark-shell限制,你可以用你想要的行数调用show

allrecords.show(100)

并将结果保存到您的主目录中,您只需将数据帧转换为rdd并在其上调用saveAsTextFile操作,如下所示

     allrecords.rdd.saveAsTextFile("path_where_save_file")

您还可以使用saveAsTextFile操作

将文件保存在hdfs中

答案 2 :(得分:0)

您可以使用

val allrecords = sqlContext.sql("SELECT FROM_UNIXTIME(timestamp/1000,'%Y-%M-%d) as timestamp, FROM_UNIXTIME(endtimestamp/1000,'%Y-%M-%d) as endtimestamp FROM table")

这应该可以将毫秒转换为日期