这个复杂的逻辑是否可用于火花?

时间:2016-08-15 06:44:56

标签: apache-spark pyspark rdd

我有一些跟随结构的数据,数据的大小非常大。我找不到合适的逻辑来使用spark。

Data1,Data2,Flag
2016-04-29,00:40:15,1
2016-04-29,00:40:24,2
2016-04-29,00:40:35,2
2015-04-29,00:40:36,2
2015-04-29,00:40:43,2
2015-04-29,00:40:45,2
2015-04-29,00:40:55,1
2015-04-29,00:41:05,1
2015-04-29,00:41:16,1
2015-04-29,00:41:17,2
.....................
.....................
2016-11-29,11:52:36,2
2016-11-29,11:52:43,2
2016-11-29,11:52:45,2
2016-11-29,11:52:55,1

我希望数据符合以下要求。

1.如您所知,第一个数据的时间序列是2016-04-29,00:40:15。我想得到下一个数据,这是最后一个小于18秒的数据。我将获得第二个数据:2016-04-29,00:40:24,2第三个数据是:2015-04-29,00:40:36,2

2.如果下一个数据的标志与引物的数据不同。无论是最后一个小于18秒的数据,我都会得到这些数据。我会选择这个数据作为新的开始。

对于上述两个要求,我将获得如下数据:

Data1,Data2,Flag
2016-04-29,00:40:15,1
2016-04-29,00:40:24,2    (flag change)
2015-04-29,00:40:36,2    (last smaller than the beginning in 18 secs)
2015-04-29,00:40:55,1    (flag change)
2015-04-29,00:41:05,1    (last smaller than the beginning in 18 secs)
2015-04-29,00:41:17,2    (flag change)
.......................
.......................

我不知道如何在火花中处理这种逻辑。感谢〜

1 个答案:

答案 0 :(得分:1)

默认情况下,Apache Spark不保证数据排序,您无法访问RDD(弹性分布式数据集)中的上一个或下一个元素。数据可以跨节点自动分区。

您可以修改加载脚本以将两个连续项存储在一个实体中的格式存储数据。 E.g:

Date1;      Time1;    Flag1; Date2;      Time2;    Flag2
2016-04-29; 00:40:15; 1;     2016-04-29; 00:40:24; 2
2016-04-29; 00:40:24; 2;     2016-04-29; 00:40:35; 2
2016-04-29; 00:40:35; 2;     2015-04-29; 00:40:36; 2
2015-04-29; 00:40:36; 2;     2015-04-29; 00:40:43; 2
2015-04-29; 00:40:43; 2;     2015-04-29; 00:40:45; 2
2015-04-29; 00:40:45; 2;     2015-04-29; 00:40:55; 1
2015-04-29; 00:40:55; 1;     2015-04-29; 00:41:05; 1
2015-04-29; 00:41:05; 1;     2015-04-29; 00:41:16; 1
2015-04-29; 00:41:16; 1;     2015-04-29; 00:41:17; 2
2015-04-29; 00:41:17; 2;     .......................
....................................................
.......................;     2016-11-29; 11:52:36; 2
2016-11-29; 11:52:36; 2;     2016-11-29; 11:52:43; 2
2016-11-29; 11:52:43; 2;     2016-11-29; 11:52:45; 2
2016-11-29; 11:52:45; 2;     2016-11-29; 11:52:55; 1

在此示例中,每一行都包含一对值:Date1Time1Flag1 - 从一个元素加载,Date2Time2,{ {1}} - 来自数据源中的下一个元素。使用这样的方案,您可以编写简单的脚本来分析两个串行数据元素中的差异,Spark将在集群中运行它。