Scala:将dataframe列复制到数组中并保留原始顺序
假设我有一个dataframeScala:将dataframe列复制到数组中并保留原始顺序,scala,apache-spark,Scala,Apache Spark,假设我有一个dataframedf,其中有一个timestamp列和一个integer列,这样就没有时间戳出现在多个记录中。看起来是这样的: timestamp | value ------------------ 2019-07-03 | 2100 2019-04-15 | 1828 2019-06-01 | 948 2019-07-12 | 2912 [etc.] 使用以下方法,我可以按时间戳订购: df.createorReplaceView(“tmp”) var sql_cmd=“”
df
,其中有一个timestamp列和一个integer列,这样就没有时间戳出现在多个记录中。看起来是这样的:
timestamp | value
------------------
2019-07-03 | 2100
2019-04-15 | 1828
2019-06-01 | 948
2019-07-12 | 2912
[etc.]
使用以下方法,我可以按时间戳订购:
df.createorReplaceView(“tmp”)
var sql_cmd=“”选择
*
从…起
tmp
订购人
时间戳asc”“;
var new_df=spark.sql(sql_命令);
然后以这种方式获得新的df:
timestamp | value
------------------
2019-04-15 | 1828
2019-06-01 | 948
2019-07-03 | 2100
2019-07-12 | 2912
[etc.]
是否有方法将
new_df
的value
的内容放入数组new_df_数组
,以便保留该列数字的顺序?(即:新的测向数组[0]==1828
,新的测向数组[1]==948
等)这应该可以做到:
val array = new_df.coalesce(1).sortWithinPartitions($"timestamp").collect()
请注意,这不是数据帧,而是一个普通的scala数组,一个简单的
collect()
不会改变数据帧中记录的顺序。@sachav感谢您的评论-那太棒了!您能给我指出一些文档,确保collect()
不会影响数据帧中的顺序吗?虽然collect肯定会维持分区内的顺序,但我不确定分区本身的顺序是否会被保留。虽然我在文档中找不到任何引用,下面是一个有趣的答案: