转换 RDD 中的字符串集合
Transforming a collections of strings in an RDD
我正在尝试解析 HL7 值,因为我使用了几个 jar 文件,这些 jar 文件从字符串解析 HL7 值,我执行了代码并且它在 scala 中工作正常但现在我想要同样的东西运行 在 scala 中,我在示例中使用了以下代码,但出现了以下错误。所以为了解决这个问题,我想将 org.apache.spark.rdd.RDD[String]
转换为 String
.
代码:
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);
}
}
更新
样本:
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
错误:
error: type mismatch;
found : org.apache.spark.rdd.RDD[String]
required: String
val hapiMsg = p.parse(textfile);
当您使用 RDD
时,您需要记住抽象是针对 值集合 (实际上有点复杂,但让我们暂时保留它),而不是单个值。
鉴于您的示例,我们需要映射集合中的所有元素并尝试提取它们的 PID。我们可以使用 mapPartitions
来做到这一点,这样我们就不必为每个值分配一个新的 HapiContext
:
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
用作 (当然 不要那样做 在任何类型的生产环境中使用它时)。
我正在尝试解析 HL7 值,因为我使用了几个 jar 文件,这些 jar 文件从字符串解析 HL7 值,我执行了代码并且它在 scala 中工作正常但现在我想要同样的东西运行 在 scala 中,我在示例中使用了以下代码,但出现了以下错误。所以为了解决这个问题,我想将 org.apache.spark.rdd.RDD[String]
转换为 String
.
代码:
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);
}
}
更新
样本:
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
错误:
error: type mismatch;
found : org.apache.spark.rdd.RDD[String]
required: String
val hapiMsg = p.parse(textfile);
当您使用 RDD
时,您需要记住抽象是针对 值集合 (实际上有点复杂,但让我们暂时保留它),而不是单个值。
鉴于您的示例,我们需要映射集合中的所有元素并尝试提取它们的 PID。我们可以使用 mapPartitions
来做到这一点,这样我们就不必为每个值分配一个新的 HapiContext
:
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
用作