对数据进行乱序排序

有时需要把数据顺序打乱,这种需求可以用Excel的排序功能来完成。

! 方法1:使用RAND函数构造辅助列

通过如下步骤来实现使用RAND函数构造辅助列。此处打开光盘中第9章技巧95CDROM/Excel/9/技巧95.xls)。

1、 在数据的后面加入一列辅助列,并输入公式:

RAND()

其余的单元格使用快速填充,如图10-8所示。此处打开光盘中第9章技巧95CDROM/Excel/9/技巧95.xls)。

2、选择需要设置的单元格区域F2F14,选择“开始”选项卡中的“排序和筛选 > 升序”命令,如图10-9所示。弹出“排序提醒”对话框,并在其对话框中单击“排序”按钮,结果如图10-10所示。

排序后辅助列中的数据并不按照升序排列,原因是RAND函数在单元格变化后会重新计算结果,这就导致辅助列中的数据不按照顺序排列。应用这个特性继续进行升序排列,会生成另一种结果。

! 方法2:使用RANDBETWEEN函数构造辅助列

在数据的后面加入一列辅助列,并输入公式:

=RANDBETWEEN(0,14)

其余的单元格使用快速填充,如图10-11所示。

剩下的操作都与前一种方法相同。

使用哪种方法由用户决定。两种方法的原理是相同的,区别就在于输入字符的多少。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Flink 中,要对乱序数据进行排序,可以使用 Flink 的 `KeyedStream` 和 `ProcessFunction` 来实现。下面是一个示例代码: ```java import org.apache.flink.api.common.functions.MapFunction; import org.apache.flink.api.java.tuple.Tuple2; import org.apache.flink.streaming.api.datastream.DataStream; import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; import org.apache.flink.streaming.api.functions.KeyedProcessFunction; import org.apache.flink.util.Collector; public class FlinkSortExample { public static void main(String[] args) throws Exception { StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); DataStream<Tuple2<String, Integer>> input = env.fromElements( new Tuple2<>("key1", 5), new Tuple2<>("key2", 3), new Tuple2<>("key1", 2), new Tuple2<>("key2", 1) ); DataStream<Tuple2<String, Integer>> sortedOutput = input .keyBy(0) // 根据指定的 key 进行分组 .process(new SortProcessFunction()); sortedOutput.print(); env.execute("Flink Sort Example"); } public static class SortProcessFunction extends KeyedProcessFunction<String, Tuple2<String, Integer>, Tuple2<String, Integer>> { @Override public void processElement(Tuple2<String, Integer> value, Context ctx, Collector<Tuple2<String, Integer>> out) throws Exception { // 将接收到的数据缓存起来 ctx.timerService().registerEventTimeTimer(ctx.timestamp()); ctx.getBroadcastState().put(ctx.timestamp(), value); } @Override public void onTimer(long timestamp, OnTimerContext ctx, Collector<Tuple2<String, Integer>> out) throws Exception { // 当定时器触发时,遍历缓存的数据并输出 for (Tuple2<String, Integer> value : ctx.getBroadcastState().values()) { out.collect(value); } // 清空缓存 ctx.getBroadcastState().clear(); } } } ``` 在上面的示例中,我们使用 `keyBy` 方法对输入流进行分组,然后使用 `process` 方法将数据存储在状态中,并在定时器触发时输出排序后的数据。在实际应用中,你可能需要根据具体的需求进行调整和优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值