regex - 在Pig脚本中使用正则表达式从日志中提取字符串

标签 regex hadoop apache-pig

我有日志数据,我想将每个信息提取到一个变量中

以下是示例单行日志。
{:id => 306,:name =>“bblite”,:cpu => {:quota => 4,:allocated => 4,:actual => 0},:memory => {:quota => 8192, :allocated => 8192,:actual => 8578},:cluster_stats => {“wc1104” => {:cpu => 0,:mem => 8578}}}

我需要具有所有ID的变量,具有所有名称的变量,具有CPU的变量和具有所有群集统计信息的变量

以下是我的 pig 脚本的一部分。我可以存储ID,但不知道如何使用正则表达式提取其余ID。




matching_messages = FILTER raw_lines BY (LOWER(message) MATCHES '.*cc_altus-plaform.*');

ids = FOREACH matching_messages GENERATE REGEX_EXTRACT(message,'id=>\\d*',0);

names = FOREACH matching_messages GENERATE REGEX_EXTRACT(message,'name=>\\"\\",',0);

line_with_date = FOREACH matching_messages GENERATE
DateFormatter(timestamp) AS formatted_time: chararray, message;

DUMP names;

最佳答案

以下代码段是我编写的可运行的正则表达式:

id = FOREACH matching_messages GENERATE REGEX_EXTRACT(message,'(?<=id=>)\\d*',0);

name = FOREACH matching_messages GENERATE REGEX_EXTRACT(message,'name=>\\"[\\w]*\\"',0);

cpu = FOREACH matching_messages GENERATE REPLACE( REGEX_EXTRACT(message, 'cpu=>\\{.*?\\}',0), ',','');

memory = FOREACH matching_messages GENERATE REGEX_EXTRACT(message,'memory=>\\{.*?\\}',0);

cluster = FOREACH matching_messages GENERATE REGEX_EXTRACT(message,'cluster_stats=>\\{.*?\\}',0);

关于regex - 在Pig脚本中使用正则表达式从日志中提取字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47184158/

相关文章:

regex - 帮助解决一组中缺乏值(value)的正则表达式模式

hadoop - Apache Pig弃用错误

c++ - std::regex 忽略正则表达式命令中的空格

regex - sed 替换引号

hadoop - 即使在我的系统上设置了 protoc 2.5.0,构建 hadoop 仍然失败

hadoop - HBase读取高负载

hadoop - Spark rawcomparator 上序列化对象的比较

amazon-web-services - 将 PIG 与 Hadoop 结合使用,我如何通过正则表达式匹配具有未知组数的部分文本?

azure - 在Azure中通过.NET应用程序流式传输

python - 在列上应用正则表达式来检测 pyspark 数据框中日志的 log4j casee 的最佳实践是什么?