使用talend将文本文件转换为excel

ct2axkht  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(421)

我目前正在做一个talend项目,将tweet日志加载到hive表中。但由于文本文件的非结构化格式,我必须首先将其处理为结构化文件,在本例中,我将其转换为csv,使其用逗号分隔。
我设法把这些列分开如下。

这是我的本职工作。

这是我正在处理的文本文件。

我试图使突出显示的部分作为一个单一的列。由于文件输入中按空格分隔的配置,它将tweet拆分。有什么办法解决这个问题吗?

hwazgwia

hwazgwia1#

文件很难解析,因为分隔符(空格)也存在于数据中。如果可能的话,最好从源头上解决。但由于这并不总是可行的,下面是我能想到的:

其思想是在文本中的每个日期前插入一个换行符(或数据中尚未出现的任何其他字符)(因为这是最独特的模式)。接下来,在 tNormalize ,这样每行上都有一个字符串,其中包含日期、用户名和tweet。
我为匹配日期而编写的又快又脏的正则表达式是:

(\\w{3}\\s\\w{3}\\s\\d{2}\\s\\d{2}:\\d{2}:\\d{2}\\s\\w{3}\\s\\d{4})

并替换为符合日期的回车: \n$1 接下来, tExtractRegexFields 使用另一个正则表达式在其各自的列中提取日期、用户名和tweet。下面是我使用的正则表达式:

(\\w{3}\\s\\w{3}\\s\\d{2}\\s\\d{2}:\\d{2}:\\d{2}\\s\\w{3}\\s\\d{4}\\s)\\(([^\\)]+)\\)\\s(.+)

共有3个捕获组,一个用于日期,一个用于用户名,最后一个捕获之后的所有文本,即tweet。
在我的示例中,我使用了以下文本:

"Fri Mar 15 23:58:55 CET 2013 (iMezouar) this is the 1st tweetFri Mar 15 23:58:55 CET 2013 (username2) this is the 2nd tweetFri Mar 15 23:58:55 CET 2013 (username3) this is the 3rd tweet"

我得到了:

.-----------------------------+---------+----------------------.
|                          tLogRow_2                           |
|=----------------------------+---------+---------------------=|
|date                         |username |tweet                 |
|=----------------------------+---------+---------------------=|
|Fri Mar 15 23:58:55 CET 2013 |iMezouar |this is the 1st tweet |
|Fri Mar 15 23:58:55 CET 2013 |username2|this is the 2nd tweet |
|Fri Mar 15 23:58:55 CET 2013 |username3|this is the 3rd tweet"|
'-----------------------------+---------+----------------------'

相关问题