2016-08-15 85 views
0

我有一些像follow結構的數據,數據的大小非常大。我找不到適合使用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) 
....................... 
....................... 

我不知道該如何應對火花此邏輯。謝謝〜

+0

您的輸入數據是否直接來自數據流[例如kafka,storm]? – hadooper

回答

1

默認情況下,Apache Spark不保證數據排序,也不能訪問RDD(彈性分佈式數據集)中的上一個或下一個元素。數據可以通過節點自動分區。

您可以修改加載腳本來以兩個連續項目存儲在一個實體中的格式存儲數據。例如爲:

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 - 從數據源下一個元素 - 從一個元件,Date2Time2Flag2加載。通過這種方案,您可以編寫簡單的腳本來分析兩個串行數據元素中的差異,並且Spark將在集羣中運行它。