2016-04-26 89 views
1

我试图通过Hapi解析HL7消息在map-reduce函数中我得到了EncodingNotSupportedException当我运行地图任务时。 我试图添加\ n或\ r到每个段的结尾,但我面临着同样的错误。 消息保存在文本文件中并上传到HDFS。我应该需要补充的东西,这是我的代码hl7消息编码错误,同时解析map-reduce中的消息

String v = value.toString(); 

InputStream is = new StringBufferInputStream(v);   
is = new BufferedInputStream(is);  
Hl7InputStreamMessageStringIterator iter = new Hl7InputStreamMessageStringIterator(
        is); 

    HapiContext hcontext = new DefaultHapiContext(); 
    Message hapiMsg; 
    Parser p = hcontext.getGenericParser(); 

    while (iter.hasNext()) { 

     String msg = iter.next(); 

     try { 
      hapiMsg = p.parse(msg); 
     } catch (EncodingNotSupportedException e) { 
      e.printStackTrace(); 
      return; 
     } catch (HL7Exception e) { 
      e.printStackTrace(); 
      return; 
     } 
    } 

样本消息

MSH|^~\&|HIS|RIH|EKG|EKG|20150121002000||ADT^A01||P|2.5.1 
EVN||20150121002000|||||CITY GENL HOSP^0133195934^NPI 
PID|1||95101100001^^^^PI^CITY GENL HOSP&0133195934&NPI||SNOW^JOHN^^^MR^^L||19560121002000|M||2054-5^White^CDCREC|470 Ocean Ave^^NEW YORK^^11226^USA^C^^29051||^^^^^513^5551212|||||95101100001||||2186-5^White American^CDCREC|||1 
PV1||E||E||||||||||1|||||||||||||||||||||||||||||| 
OBX|1|NM|21612-7^PATIENT AGE REPORTED^LN||60|a^YEAR^UCUM|||||F|||201601131443 
OBX|2|NM|21613-7^Urination^LN||2|a^DAY^UCUM|||||F|||19740514201500 
DG1|001||4158^Diabetes^I9CDX||19740514201500|A|5478^Non-infectious 
DG1|002||2222^Huntington^I9CDX||19610718121500|A|6958^Genetic 
+0

可能是PipeParser会帮你处理编码。 –

+0

我也使用它,我也有同样的错误 – Zaman

+1

告诉我们,消息是怎样的!切勿将HL7消息存储为文本文件,而是以二进制形式存储。你确定,分段分隔符好吗? – sqlab

回答

0

决不店HL7的消息为文本文件,但作为二进制文件。你确定,分段分隔符好吗?

从HDFS读取HDFS消息后,只需通过打印到控制台或通过使用调试器,如果消息在分析前仅包含\r作为段分隔符,那么只需检查您的HL7消息。

段定界符必须是\r,即x0d,“回车”而不是\n,即x0a“换行符”。有可能有一些工具,可能是HL7编辑器,接受可选的分隔符或编写错误的分隔符,但这不是标准。