首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在RDD中转换字符串集合

在RDD中转换字符串集合
EN

Stack Overflow用户
提问于 2016-08-24 14:24:43
回答 1查看 193关注 0票数 2

我试图解析HL7值,因为我使用了几个jar文件,那些jar文件解析字符串中的HL7值,我执行了代码,它在scala中运行良好,但是现在我希望在scala中运行相同的东西,因为我在下面的代码中使用了示例,但是我得到了下面的错误。因此,为了解决这个问题,我想将org.apache.spark.rdd.RDD[String]转换为String

代码:

代码语言:javascript
复制
 object ExampleUseTerser {
  def main(args: Array[String]): Unit = {
    val textfile = sc.textFile("/user/cloudera/xxxx/File")
    val context : HapiContext = new DefaultHapiContext();
    val p  = context.getGenericParser();
    val hapiMsg  = p.parse(textfile);
    val terser  = new Terser(hapiMsg);
    val secondAllergyType:String  = terser.get("/PID-7");
    println(secondAllergyType);

  } 
}

更新

样本:

代码语言:javascript
复制
PID|1|5897450M|58974650M|58977650M|CSTO^TES||19320722|F|||745 - 81 ST^^IAMI BEH^FL^341|||||||332165520
ORC||5033220|503320||||||20150202|||1689659096^HAM^MISH^^^^PI
OBR|1||64564|DF DEFAULT|||20150202|2015002||||||||16096^^^^^I|||||||||
HHH|1|NM|6690-2^^LN^0^^L||7|XE/UL|3.4-18||||F|||20150202| ^^L
HHH|9|NM|777-3^LOINC^LN^015172^PLATELETS^L||185|X10E3/UL|150-379||||F|||201202|TA   ^^L
HHH|10|NM|770-8^^LN^015107^^L||65|%|||||F|||20150202|TA   ^^L
HHH|11|NM|736-9^LOINC^LN^015123^^L||26|%|||||F|||20150202|TA   ^^L
HHH|12|NM|5905-5^LOINC^LN^015131^^L||8|%|||||F|||20150202|TA   ^^L
HHH|13|NM|713-8^LOINC^LN^015149^^L||1|%|||||F|||20150202|TA   ^^L

错误:

代码语言:javascript
复制
error: type mismatch;
 found   : org.apache.spark.rdd.RDD[String]
 required: String
           val hapiMsg  = p.parse(textfile);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-24 15:30:49

当您使用一个RDD时,您需要记住,抽象是对一个值集合的抽象(实际上它稍微复杂一些,但现在让我们暂时保留它),而不是一个值。

考虑到您的示例,我们需要映射集合中的所有元素,并尝试提取它们的PID。我们可以使用mapPartitions来完成这个任务,这样我们就不必为每个值分配一个新的HapiContext

代码语言:javascript
复制
object ExampleUseTerser {
  def main(args: Array[String]): Unit = {
    val textfile = sc.textFile("/user/cloudera/xxxx/File")
    val parsedData = textfile.mapPartitions { it => 
      val context: HapiContext = new DefaultHapiContext()
      val parser = context.getGenericParser()

      it.map { file => 
        val hapiMsg = parser.parse(file)
        val terser = new Terser(hapiMsg)
        terser.get("/PID-7")
      }
    }
  } 
}

如果您正在测试此文件并希望查看已解析的文件,则可以使用RDD.collect作为I've mentioned in my previous answer (当然,在任何类型的生产环境中使用该文件时都不要这样做)。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39126019

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档