我刚开始学习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位置?
答案 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")
这应该可以将毫秒转换为日期