预处理/清理twitter数据

guz6ccqo  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(360)

关闭。这个问题需要更加突出重点。它目前不接受答案。
**想改进这个问题吗?**通过编辑这篇文章更新这个问题,使它只关注一个问题。

6年前关门了。
改进这个问题
我需要预处理原始的twitter数据集(大约1gb的文本文件)。在预处理(包括删除停止词、特殊符号、url)之后,我将使用lucene对它们执行索引。
你们中的任何一个能建议最好的方法去清理推特吗?
以下是数据示例:

60730027    6298443824  thank you echo park. you've changed A LOT, but as long as I'm getting paid to make you move, I'm still with it! 2009-12-03 02:54:10
60730027    6297282530  fat Albert Einstein goin in right now over here!!!  2009-12-03 01:35:22
60730027    6283122724  SATURDAY NIGHT AT THE TAVERN:  http://yfrog.com/4aka3cj 2009-12-02 16:21:40
60730027    6283105517  FRIDAY NIGHT AT THE GRIFFIN: http://yfrog.com/3glqzj    2009-12-02 16:21:04

第一列编号对应于用户位置。但是,我不确定第二列数字对应什么。
为了清理数据,我将用城市名称替换用户位置代码,删除时间戳,删除停止字符,url等等。
请就如何进行提出建议。
提前谢谢!

kjthegm6

kjthegm61#

首先,您需要加入“位置代码”列,用城市名称替换它们。自 locationCode-city tuples(Map)相对较小(~400),可以进行Map端连接。
在提交作业之前,首先将Map文件添加到缓存中。根据hadoop版本使用:

// prior to 2.2.0
DistributedCache.addCacheFile(new Path(path/cityCode_NameMappings.txt).toUri(), conf);

//OR 2.2.0 onwards. DistributedCache is deprecated 
job.addCacheFile(new Path(filename).toUri());

在Map绘制程序中检索它 setup 方法使用:

Path[] cacheFiles = DistributedCache.getLocalCacheFiles(job);

// OR
Path[] cacheFiles = context.getLocalCacheFiles();

通过文件名识别文件,读取文件并将内容放入静态文件中 HashMap<code,name> 并用它来替换 map 方法。当可能的Map数量相对较少时,可以采用相同的策略替换第二列(当前超出范围)。
最后只选择实际tweet的主体,regex和简单的字符串操作似乎就足够了。现在您有两个选择:
使用reducer类进行文本提取。这样,代码替换和tweet正文提取将在单独的抽象中进行。
在Map器本身中进行处理,并将还原数设置为零。这将是一个Map只工作,肯定会运行得更快,虽然它看起来有点混乱。
选择权在你。同样,如果城市代码Map的数量很大,则除了执行reduce-side连接之外别无选择。这将是相对复杂的实施。
第二个想法:如果您可以自由选择另一个工具来索引原始lucene以外的内容,我建议您使用elasticsearch(构建在lucene之上)。然后可以利用hive进行连接,并使用hivees集成将数据加载到索引中。但是你还是要做文本处理(也许Hive服务器可以做到这一点)。

相关问题