由于我是Spark / Scala的新手,我处理我的第一个问题,并且我想知道是否有一种简单的方法可以使用Spark本机操作来处理它们scala方法,因为我可能会遗漏一些东西。
假设我有一个文本文件日志(先前已订购),每行代表人次
Peter|5:45
Peter|6:05
Peter|6:27
Peter|6:58
Peter|6:59
Peter|7:59
Mark|7:40
Mark|7:55
Mark|8:30
现在我可以创建一个存储人和时间的RDD:
val file = sc.textFile(logFile, 2).cache()
val log = file.map(x => (x.split('|').lift(0).get,x.split('|').lift(1).get))
我想要的是一个新值(间隔),表示如果差异小于30分钟,连续记录(对于同一个人)属于相同的时间间隔。
在下表中,您可以看到:
# Person Time "Lag" Diff Note Interval
1 Peter 5:45 - - first row Peter Peter started at 5:45
2 Peter 6:05 5:45 20 <30 mins Peter started at 5:45
3 Peter 6:27 6:05 22 <30 mins Peter started at 5:45
4 Peter 6:58 6:27 31 >30 mins Peter started at 6:58
5 Peter 6:59 6:58 1 <30 mins Peter started at 6:58
6 Peter 7:59 6:59 60 >30 mins Peter started at 7:59
7 Mark 7:40 - - first row Mark Mark started at 7:40
8 Mark 7:55 7:40 15 <30 mins Mark started at 7:40
9 Mark 8:30 7:55 35 >30 mins Mark started at 8:30
&#13;
所以我的RDD应该是这样的:
Person Time Interval
Peter 5:45 Peter@5:45
Peter 6:05 Peter@5:45
Peter 6:27 Peter@5:45
Peter 6:58 Peter@6:58
Peter 6:59 Peter@6:58
Peter 7:59 Peter@7:59
Mark 7:40 Mark@7:40
Mark 7:55 Mark@7:40
Mark 8:30 Mark@8:30
&#13;
这是否可以通过合理的努力,或者我是否假装过多的Spark本机操作与Scala方法相结合?
由于我更熟悉SQL,因此使用Spark-SQL来操作我的数据集可能会更容易,但我也想熟悉Spark核心。
每个建议,提示,代码示例都将非常感激。
提前致谢
FF