我是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(序列号)。
有什么想法吗?
谢谢
答案 0 :(得分:1)
我想创建一个javascript来输出JSON中的行的字段,比如添加到行中的字符串:
{"id":"a","col1":"1","col2":"2","col3":"3"}
接下来,您可以使用组步骤并将基本字段设置为“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”。删除分隔符/磁盘阵列选项,使其无需额外格式化,您就完成了。
答案 1 :(得分:1)
如果我已正确理解您的问题,您可以使用" GROUP BY"步骤将列分组(即数据集中的第一个标题),然后将它们存储到内存中。
一旦完成,请使用参数循环来获取变量"并动态生成多个JSON输出。检查下图:
在JSON输出步骤中,使用header1之类的变量生成多个文件。突出显示我在JSON输出中所做的更改。
如果您发现令人困惑,我已在here上传了示例代码。
希望有所帮助:)