- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试将文本数据从本地目录提取到 HDFS,在提取之前我需要将文本转换为有效的 json。为此,我正在使用 JavaScript Evaluator 处理器。
在 javascript 评估器中我无法读取任何记录。
这是我的示例代码:
for(var i = 0; i < records.length; i++) {
try {
output.write(records[i]);
} catch (e) {
error.write(records[i], e);
}
}
除了 JavaScript 求值器还有其他更好的选择吗?
这是我的示例输入数据:
{
1046=
1047=
1048=5324800
1049=20180508194648
1095=2297093400,
1111=up_default
1118=01414011002101251
1139=1
}
{
1140=1
1176=mdlhggsn01_1.mpt.com;3734773893;2472;58907
1183=4
1211=07486390
1214=0
1227=51200
1228=111
1229=0
1250=614400,
}
更新:
根据@metadaddy 的回答,我尝试使用 Groovy insted JavaScript。对于@metadaddy 在他的回答中显示的相同数据,我得到以下异常。
最佳答案
您的 JavaScript 需要通读输入,构建输出记录。
使用 Text 格式,Directory origin 将为每一行输入创建一个包含 /text
字段的记录。
此 JavaScript 将构建您需要的记录结构:
for(var i = 0; i < records.length; i++) {
try {
// Start of new input record
if (records[i].value.text.trim() === '{') {
// Use starting input record as output record
// Save in state so it persists across batches
state.outRecord = records[i];
// Clean out the value
state.outRecord.value = {};
// Move to next line
i++;
// Read values to end of input record
while (i < records.length && records[i].value.text.trim() !== '}') {
// Split the input line on '='
var kv = records[i].value.text.trim().split('=');
// Check that there is something after the '='
if (kv[1].length > 0) {
state.outRecord.value[kv[0]] = kv[1];
} else if (kv[0].length > 0) {
state.outRecord.value[kv[0]] = NULL_STRING;
}
// Move to next line of input
i++;
}
// Did we hit the '}' before the end of the batch?
if (i < records.length) {
// Write record to processor output
output.write(state.outRecord);
log.debug('Wrote a record with {} fields',
Object.keys(state.outRecord.value).length);
state.outRecord = null;
}
}
} catch (e) {
// Send record to error
log.error('Error in script: {}', e);
error.write(records[i], e);
}
}
下面是样本输入数据转换的预览:
现在,要将整个记录作为 JSON 写入 HDFS,只需将 Hadoop FS 目标中的数据格式设置为 JSON。
关于javascript - StreamSets 将 Text 转换为 Json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50348197/
我的团队需要使用旧版本的 StreamSet,即 2.5 版。但在 3.8 版本中,我们希望在旧环境中包含一些重要的处理器,即 JDBC 元数据处理器。 已完成的工作如下: 使用 StreamSets
我们的团队正在探索 HDFS 到本地数据提取的选项。我们被建议使用 StreamSet,但团队中没有人对此有任何想法。谁能帮助我了解这是否符合我们将数据从 HDFS 提取到本地系统的要求? 只是一个额
我正在阅读有关 Kafka 和 StreamSets 的文章,我的理解是 Kafka 充当生产者系统和订阅者之间的经纪人。生产者将数据推送到Kafka集群,订阅者从Kafka拉取数据 StreamsS
我在 Cloudera Distribution 上使用 StreamSets,试图从这个网站 http://files.data.gouv.fr/sirene/ 获取一些数据 我在选择 HTTP 客
即使看了教程,我也不是很清楚架构。我们如何在分布式环境中扩展流集?比方说,我们的输入数据速度从源开始增加,那么如何确保 SDC 不会出现性能问题?将运行多少守护进程?是 Master worker 架
我正在使用 Streamset 数据收集器 3.19.1 版,目前正在尝试将 Streamset 与 LDAP 服务器集成以进行身份验证,我成功进行了集成,但是我们在配置角色和组方面遇到了困难,就
我已经构建并部署了以下 docker-compose.yml 文件: services: solr1: container_name: solr1 image: solr:5-sl
我正在尝试将文本数据从本地目录提取到 HDFS,在提取之前我需要将文本转换为有效的 json。为此,我正在使用 JavaScript Evaluator 处理器。 在 javascript 评估器中我
在cdc的情况下,StreamSets Data Collector有没有办法根据源数据库自动在目标数据库中创建表? 我正在从源读取数据:mssql 并写入目标 postgresql。如果我对源中的
我需要安排 JDBC 消费者作业在每天早上 5 点运行,据我所知,当我在早上 5 点开始作业并在查询间隔中设置 24 小时时,我可以让作业在凌晨 5 点运行. 但我需要安排第一个实例在早上 5 点开始
我正在使用 ansible 脚本在 k8s 主节点上部署流集。我正在检查流集仪表板是否可以通过 http://127.0.0.1 访问。 :{{streamsets_nodePort}} 其中stre
我计划做一个类项目,并且正在研究一些可以自动化或设置系统之间数据流的技术,发现有几个技术,即 Apache NiFi 和 StreamSets(据我所知)。我无法理解的是它们与可以使用它们的用例之间的
我正在使用 HttpClient origin 将文件从 HTTP url 流式传输到 Hadoop 目标,但目标中的文件名附加了一些随机 uuid。我希望文件名与源中的一样。 示例:源文件名为 RE
我正在尝试构建一个 JAVA 客户端以 POST 到 RESTApi,但是,在这样做时我收到错误“用户未经过身份验证”。 在查看 API 服务文档时,我发现我必须先获取身份验证 token ,然后才能
试图弄清楚是否可以使用 apache NiFi 或 Streamsets 实现连接。这样我就可以定期从 HBase 读取数据,与其他表连接并将少量字段写入 Hive 表。 或者有没有其他工作流管理器工
我在 CDH 5.7.0 版上使用流集 从 HDFS(源)加载文件并在 Solr(目标)上创建记录的示例工作流程。验证失败 - SOLR_03 - 无法连接到 Solr 实例:org.apache.s
我正在尝试在 StreamSets 中设置 Mysql-BinaryLog,但它提示无法加载驱动程序实例。 我的.cnf: [mysqld] server-id = 22334
我正在 CentOS 上的 Docker 中运行 StreamSets。尝试在 Jython 中导入 python 包,它返回以下错误: SCRIPTING_05 - Script error whi
我正在尝试从 mapr fs origin 进行简单的数据移动到 mapr fs destination (这不是我的用例,只是为了测试目的做这个简单的 Action )。尝试 validate 时这
我是一名优秀的程序员,十分优秀!