talend - Talend:相当于logstash“键值”过滤器
问题描述
我正在发现 Talend Open Source Data Integrator,我想将我的数据文件转换为 csv 文件。
我的数据是一些关键值数据集,例如这个例子:
A=0 B=3 C=4
A=2 C=4
A=2 B=4
A= B=3 C=1
我想将其转换为像这样的 CSV:
A,B,C
0,3,4
2,,4
2,4,
使用 Logstash,我使用了“键值”过滤器,它能够通过几行代码完成这项工作。但对于 Talend,我没有发现类似的转变。我尝试了“分隔符文件”作业和其他一些作业但没有成功。
解决方案
这是相当棘手和有趣的,因为 Talend 是基于模式的,所以如果您没有预定义输入/输出模式,则可能很难实现您想要的。
这是您可以尝试的东西,有很多组件要使用,我没有设法找到组件更少的解决方案。我的解决方案是使用不寻常的组件,例如tNormalize
和tPivotToColumnsDelimited
。有一个缺陷,因为最后你会得到一个额外的列。
1 - tFileInputRaw
,因为如果你不知道你的输入模式,只需阅读这个文件。
2 - tConvertType
:在这里您可以转换Object
为String
类型
3 - tNormalize
:您必须手动分隔行(\n
用作分隔符)
4 - tMap
:添加一个序列"I"+Numeric.sequence("s1",1,1)
,这将在以后用于识别和重新组合行。
5 - : 在这里我对 'TAB' 分隔符进行归一化,为每一对tNormalize
获取一行key=value
6 - tMap
:你必须在"="
标志上分开。
在这一步,您将获得如下输出:
|seq|key|value|
|=--+---+----=|
|I1 |A |1 |
|I1 |B |2 |
|I1 |C |3 |
|I2 |A |2 |
|I2 |C |4 |
|I3 |A |2 |
|I3 |B |4 |
'---+---+-----'
其中 seq 是行号。
7 - 最后,使用 tPivotToColumnDelimited,您将获得结果。不幸的是,您将拥有额外的“ID”列,因为组件 tPivot 提供的输出模式不可编辑。(实际上,该组件正在创建模式,这在 talend 组件中是非常不寻常的)。使用 ID 列作为重组列。
希望这会有所帮助,如果您有动态输入/输出模式,Talend 并不是一个非常简单的工具。
推荐阅读
- python - Google App Engine/NDB:“BadValueError: Expected Key, got None”用于保存完美的实体
- database - 将多边形坐标转换为 PostgreSQL 可以理解的格式
- java - 如何从肥皂响应中提取相同元素类型的列表?
- javascript - 带有 ACK 的 Socket IO Swift 客户端发出消息
- python - 在 Python 中格式化一长串冗长术语的最佳 PEP8 兼容方法
- java - 引起:java.lang.ClassNotFoundException:org.eclipse.core.runtime.Plugin
- excel - VBA Application.Ontime 错误 438。对象不支持此属性或方法
- c# - MVC5 Portable Area,如何使用消息总线?
- java - Swing 中的每个点颜色
- unity3d - Unity 奇怪的错误 [9:14:44] 关于它可能是什么的任何想法?