1

我是 Kettle 的新手,但到目前为止一切正常。但是我无法弄清楚如何做到这一点。

我有一个看起来像这样的 csv

a, col1, col2, col3
a, col1, col2, col3
a, col1, col2, col3
b, col1, col2, col3
b, col1, col2, col3
c, col1, col2, col3
c, col1, col2, col3

第一列以键 (a,b,c) 开头,然后是其余列。我想要做的是在 csv 中读取(覆盖),然后根据键拆分 csv,所以我有 3 个数据块/组数据,然后将这些数据块中的每一个转换为一个单独的 json 文件,我认为我能得到。

我无法理解的是对数据进行分组,然后对每个单独的组执行单独的操作(转换为 json)。它不是我有问题的创建 json。

数据来自许多环境传感器的传感器网络,因此有许多键,数百个,并且添加了新键。我之前使用 map reduce 来处理这些数据,因为分区的概念是我在这里尝试复制的,而不使用kettle 的hadoop 元素,因为部署不同。一旦我对数据进行了分区,它就需要作为单独的记录加载到不同的地方。密钥是传感器的唯一 ID(序列号)。

请问有什么想法吗?

谢谢

4

2 回答 2

1

如果我正确理解了您的问题,您可以使用“GROUP BY”步骤对列进行分组(即数据集中的第一个标题),然后将它们存储到内存中。

在此处输入图像描述

完成后.. 使用参数循环“获取变量”并动态生成多个 JSON 输出。检查下图:

在此处输入图像描述

在 JSON 输出步骤中,使用 header1 等变量生成多个文件。在我在 JSON 输出中所做的更改下方突出显示。

在此处输入图像描述

如果您感到困惑,我在这里上传了一个示例代码。

希望能帮助到你 :)

于 2014-12-09T18:55:58.470 回答
1

我猜想创建一个 javascript 以在 JSON 中输出一行的字段,例如添加到该行的字符串:

{"id":"a","col1":"1","col2":"2","col3":"3"}

接下来,您可以使用 group 步骤并将基本字段设置为“id”字段,并将 javascript 值聚合为“用 , 分隔的连接字符串”类型

{"id":"a","col1":"1","col2":"2","col3":"3"},{"id":"a","col1":"4","col2":"5","col3":"6"}, {"id":"a","col1":"7","col2":"8","col3":"9"}

在它周围添加一些标签,你就有了有效的 json。接下来,您可以使用 javascript 步骤组装文件名:

var file_name="C:\\dir\\"+ id + ".txt";

使用文本文件输出并将文件名字段设置为“file_name”。删除分隔符/附件选项以没有额外的格式,你就完成了。

于 2013-07-30T10:37:07.733 回答