分享

如何通过spark的RDD的转化 去做数据清洗?

回帖奖励 4 云币      回复本帖可获得 1 云币奖励! 每人限 1 次
如题,我想将如下数据格式的数据源通过spark做数据转换:

        id,           ip,        version   :  有效数据                                 有效数据
362719342,10.4.6.24,4:04,0028,20160203T152325;03,0026,20160203T162324

需要转化成 如下这样的 K-V对

362719342,10.4.6.24,4   04,0028,20160203T152325
362719342,10.4.6.24,4   03,0026,20160203T162324


这个数据量很大,我还不了解spark  SQL 的dataFrame 是否能够做到这个。

这两天一直在弄这个,还望各位大神能给出点建议就好。多谢!


已有(9)人评论

跳转到指定楼层
einhep 发表于 2016-5-26 07:30:43

回帖奖励 +1 云币

spark可以通过Transformation来实现
Transformation的原理及函数如下:
楼主的想法即A转换为B




  
map(func)
  
返回一个新的分布式数据集,由每个原元素经过func函数转换后组成
filter(func)
返回一个新的数据集,由经过func函数后返回值为true的原元素组成
flatMap(func)
类似于map,但是每一个输入元素,会被映射为0到多个输出元素(因此,func函数的返回值是一个Seq,而不是单一元素)
flatMap(func)
类似于map,但是每一个输入元素,会被映射为0到多个输出元素(因此,func函数的返回值是一个Seq,而不是单一元素)
sample(withReplacement,  frac, seed)
根据给定的随机种子seed,随机抽样出数量为frac的数据
union(otherDataset)
返回一个新的数据集,由原数据集和参数联合而成
groupByKey([numTasks])
在一个由(K,V)对组成的数据集上调用,返回一个(K,Seq[V])对的数据集。注意:默认情况下,使用8个并行任务进行分组,你可以传入numTask可选参数,根据数据量设置不同数目的Task
reduceByKey(func,  [numTasks])
在一个(K,V)对的数据集上使用,返回一个(K,V)对的数据集,key相同的值,都被使用指定的reduce函数聚合到一起。和groupbykey类似,任务的个数是可以通过第二个可选参数来配置的。
join(otherDataset,  [numTasks])
在类型为(K,V)和(K,W)类型的数据集上调用,返回一个(K,(V,W))对,每个key中的所有元素都在一起的数据集
groupWith(otherDataset,  [numTasks])
在类型为(K,V)和(K,W)类型的数据集上调用,返回一个数据集,组成元素为(K, Seq[V], Seq[W]) Tuples。这个操作在其它框架,称为CoGroup
cartesian(otherDataset)

  笛卡尔积。但在数据集T和U上调用时,返回一个(T,U)对的数据集,所有元素交互进行笛卡尔积。
flatMap(func)
类似于map,但是每一个输入元素,会被映射为0到多个输出元素(因此,func函数的返回值是一个Seq,而不是单一元素)


还可以通过另外一种方法:spark sql

http://www.aboutyun.com/home.php ... do=blog&id=2982



回复

使用道具 举报

langke93 发表于 2016-5-26 07:33:30

回帖奖励 +1 云币

transformation操作:得到一个新的RDD,比如从数据源生成一个新的RDD,从RDD生成一个新的RDD


回复

使用道具 举报

liuzhixin137 发表于 2016-5-26 09:10:22
langke93 发表于 2016-5-26 07:33
transformation操作:得到一个新的RDD,比如从数据源生成一个新的RDD,从RDD生成一个新的RDD


        id,           ip,        version   :  有效数据                                 有效数据
362719342,10.4.6.24,4:04,0028,20160203T152325;03,0026,20160203T162324

需要转化成 如下这样的 K-V对

362719342,10.4.6.24,4   04,0028,20160203T152325
362719342,10.4.6.24,4   03,0026,20160203T162324




您可以看一下我的数据结构,如您列举的这些RDD的操作, 比如map, flatMap, soutByKey, ReduceByKey,要对每一个结构的第一个元素进行转换,然后加上后面的元素,通过这些RDD的转换操作,能实现这种效果吗?
回复

使用道具 举报

zhuzhuxia 发表于 2016-5-30 09:52:45

回帖奖励 +1 云币

想怎么转换都可以,包括不存在的列,值等
回复

使用道具 举报

liuzhixin137 发表于 2016-5-30 10:34:53

要什么手表,我说要手表了吗
回复

使用道具 举报

dwshmilyss 发表于 2016-6-20 11:52:40

回帖奖励 +1 云币

groupbykey就可以了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条