Skip to content

实际经历的Spark应用场景一:小量数据清洗

前言:

由于是出于兴趣自学Spark的相关基础知识,工作中我身边也没有合适的场景必须需要使用Spark。比如数据量大到单机跑好几个小时还跑不完等等。
我对于Spark的运用也仅限于练习几个例子。所以我一直感受不到Spark的威力,也不清楚哪些场景适合Spark。
Spark的适用场景是什么? 这是我几个周以至于直到现在都在思考的问题,因为我工作中并用不上它……。(欢迎各位读者分享下自己经历过的Spark使用场景)

但是最近我在工作中遇到一个场景并且用Spark花了几分钟给解决了。 这让我有点高兴,因为我用Spark解决了一个具体的问题,这让我之前的学习有了价值。
并且解决问题的过程还算流畅: 1. 首先是短暂的判断, 判断哪种方法合适做这个事情。 2. 想到用Spark来解决,并写了几行Spark代码就解决了问题。

小量数据清洗场景

这种场景如下:
我有500条数据(小量),数据具有完好的格式,以Tab键分隔。格式为ColumnA ColumnB ColumnC ColumnD.
我想要的数据是ColumnB,ColumnC,Field,其中Field是一个固定的字符串。 即把ColumnB和ColumnC和Field以’,’连接起来。
针对这种场景你会怎么实现呢?

  1. 手动? 我相信如果有20条数据,手动作为一种解决办法也还好,但500条,还是要花很长时间的
  2. 利用文件编辑器的功能? 因为Field是固定的,但是ColumnC不是定长的,批量添加内容也不是很容易
  3. 写个程序? 写个程序(Java, C++, Python),如果要写程序的话,我觉得Python是优选,其次是Java吧
  4. awk? 能立即想到awk并且熟练写出语句,我觉得你的linux功底应该不差。
  5. spark? 要不是我最近学过spark我还真想不出来用这种牛刀……

我当时的思路就是手动太多了,利用文件编辑器好像也不太容易实现,那用spark吧?

Spark的解决办法:

// create RDD with file
var tmpRDD=spark.sparkContext.textFile("XX/xx.txt")

var r=tmpRDD.map(line=>{var fields=line.split('\t'); fields(1)+","+fields(2)+",Field" })
r.collect().foreach(println)

整个过程也就花了几分钟所以也还行。

那种这种类似场景的最优解是什么呢?我个人觉得是awk,其次是spark
awk的解决办法只需要一行代码如下:

awk -F'\t' '{print $2","$3",Field"}' xx.txt

这种应用场景使用Spark算的上是杀鸡用牛刀了,因为一直一来Spark都是跟大数据关联的。
我这里提到的小量指数据量大概在几百或者上千条, 这种数据量下使用Spark并不是最合适的,但是我在这种场景下使用Spark也确实让我感受到了一点点Spark在数据清洗方面的威力。

如果是你,你会选择怎么解决类似的问题呢?你是不是有更好的解决办法?欢迎留言讨论。

Published inSpark大数据实际场景

Comments are closed.

Author Copyriht by BackendSite