在替换值之后,尝试捕获由foreach迭代在数据帧的所有行中生成的字符串值。这是我正在使用的代码块的摘录,对其进行了简化,但这与所使用的逻辑相同。最后两行都给出了NullPointerException:
{
val finalResult = hiveContext.sql("""SELECT * from """ + temptableName)
if (finalResult.count() > 0) {
finalResult.foreach { row =>
RealtimeUtil.loadStreamProperties("TestFlow.properties")
val tag1 = row.getAs("new_val1").asInstanceOf[String]
val tag2 = row.getAs("new_val2").asInstanceOf[String]
val string = """This is a template string with some value
"-Name":"TAG1", "#text":"****",
"-Name":"TAG2", "#text":"****"
"""
val string2 = string
.replace(""""-Name":"TAG1", "#text":"****"""", """"-Name":"TAG1", "#text":"""" + new_val1 +"\"")
.replace(""""-Name":"TAG2", "#text":"****"""", """"-Name":"TAG2", "#text":"""" + new_val2 +"\"")
hiveContext.sql("""insert into table testdb.final_table values ("""" + string2 + ")""")
\\above statement failing with NPE
val someDF = Seq((1, string2)).toDF("seq", "value").coalesce(1).select("value").write.format("text").mode("append").save("/tmp/output")
\\above statement failing with NPE
}
}
}
对于Spark和Scala来说是完全陌生的,只有很少的Java经验,仍然在学习绳索,如果有人可以帮助并解释为什么获得NullPointerException那就好了。我该如何解决该问题并仍然提取string2值并将其写入每个微型批次的hdfs中?我正在寻找有关如何从foreach循环DF内部捕获“ string2”的解决方案。 (假设所有初始化均已完成,并且temptableName是从具有诸如new_val1,new_val2之类的字段的数据帧创建的tempView)