分享

如何用spark某些字段的回车去除

linbowei 发表于 2016-10-18 18:07:25 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 10 13975
数据集如下;
A字段,B字段,C字段
1,"","ddd"
2,"","cccc"
其中,B字段可能包含有回车符号,使得本来只有两行的数据变成了三行,同时是结构化的数据变成非结构化。
现在的问题是,如何用spark的scala去剔除B字段的回车符号,使得数据变成两行。这样方便处理。
各位spark的大神有没有类似的处理案例。

已有(10)人评论

跳转到指定楼层
nextuser 发表于 2016-10-18 18:26:47
数据是实时的,还是离线的。
用mapreduce或则spark写个程序过滤下应该就可以
回复

使用道具 举报

linbowei 发表于 2016-10-18 18:28:28
nextuser 发表于 2016-10-18 18:26
数据是实时的,还是离线的。
用mapreduce或则spark写个程序过滤下应该就可以

离线的,我用map,然后用if else,好像不行

回复

使用道具 举报

nextuser 发表于 2016-10-18 18:31:25
linbowei 发表于 2016-10-18 18:28
离线的,我用map,然后用if else,好像不行

思路是对的,可能在实现上出了些小问题。
回复

使用道具 举报

linbowei 发表于 2016-10-18 18:33:03
nextuser 发表于 2016-10-18 18:31
思路是对的,可能在实现上出了些小问题。

不是小问题,问题还是挺大的

回复

使用道具 举报

nextuser 发表于 2016-10-18 18:39:48
linbowei 发表于 2016-10-18 18:33
不是小问题,问题还是挺大的

......
遇到什么问题了
回复

使用道具 举报

linbowei 发表于 2016-10-18 18:46:34
nextuser 发表于 2016-10-18 18:39
......
遇到什么问题了

我用tmprdd.map(line => (if(line.contains("#LLL#")) line else line.replaceAll("\n"," ")))

"#LLL#"是要去除回车的标记行
还是没有实现自己要的数据集

回复

使用道具 举报

nextuser 发表于 2016-10-18 19:15:23
本帖最后由 nextuser 于 2016-10-18 19:17 编辑
linbowei 发表于 2016-10-18 18:46
我用tmprdd.map(line => (if(line.contains("#LLL#")) line else line.replaceAll("\n"," ")))

"#LLL# ...

先来理一下楼主的逻辑:
如果这行中包含:
#LLL#
那么就替换为空
那么逻辑应该是下面代码实现。
tmprdd.map(line => (if(line.contains("#LLL#")) line.replaceAll("\n"," ") else line ))
还有Scala中空,楼主用的空字符串,是否考虑使用过null


回复

使用道具 举报

linbowei 发表于 2016-10-20 09:07:43
nextuser 发表于 2016-10-18 19:15
先来理一下楼主的逻辑:
如果这行中包含:
#LLL#

是不包含的,才替换,包含的不用替换

回复

使用道具 举报

arsenduan 发表于 2016-10-24 11:59:39
linbowei 发表于 2016-10-20 09:07
是不包含的,才替换,包含的不用替换

如果逻辑是对的,那就没有问题了。
可能是其他原因,楼主最好调试下。

如果不会调试推荐参考

Apache Spark源码走读之18 -- 使用Intellij idea调试Spark源码
http://www.aboutyun.com/forum.php?mod=viewthread&tid=10993

Spark 1.5.0 远程调试
http://www.aboutyun.com/forum.php?mod=viewthread&tid=15679


Spark通过IntelliJ IDEA远程调试


http://www.aboutyun.com/forum.php?mod=viewthread&tid=9877



回复

使用道具 举报

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

本版积分规则

关闭

推荐上一条 /2 下一条