Ich habe bis hierher:Wie man JSON in Spark mit fasterxml ohne SparkSQL parsen kann?
import com.fasterxml.jackson.module.scala.DefaultScalaModule
import com.fasterxml.jackson.module.scala.experimental.ScalaObjectMapper
import com.fasterxml.jackson.databind.ObjectMapper
import com.fasterxml.jackson.databind.DeserializationFeature
case class Person(name: String, lovesPandas: Boolean)
val mapper = new ObjectMapper()
val input = sc.textFile("files/pandainfo.json")
val result = input.flatMap(record => {
try{
Some(mapper.readValue(record, classOf[Person]))
} catch {
case e: Exception => None
}
})
result.collect
aber Array()
als Ergebnis (ohne Fehler) erhalten. Die Datei ist https://github.com/databricks/learning-spark/blob/master/files/pandainfo.json Wie gehe ich von hier aus weiter?
Nach Spark: broadcasting jackson ObjectMapper Beratung habe ich versucht,
import org.apache.spark._
import com.fasterxml.jackson.module.scala.DefaultScalaModule
import com.fasterxml.jackson.module.scala.experimental.ScalaObjectMapper
import com.fasterxml.jackson.databind.ObjectMapper
import com.fasterxml.jackson.databind.DeserializationFeature
case class Person(name: String, lovesPandas: Boolean)
val input = """{"name":"Sparky The Bear", "lovesPandas":true}"""
val result = input.flatMap(record => {
try{
val mapper = new ObjectMapper()
mapper.registerModule(DefaultScalaModule)
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
Some(mapper.readValue(record, classOf[Person]))
} catch {
case e: Exception => None
}
})
result.collect
und bekam
Name: Compile Error
Message: <console>:34: error: overloaded method value readValue with alternatives:
[T](x$1: Array[Byte], x$2: com.fasterxml.jackson.databind.JavaType)T <and>
[T](x$1: Array[Byte], x$2: com.fasterxml.jackson.core.type.TypeReference[_])T <and>
[T](x$1: Array[Byte], x$2: Class[T])T <and>
Ich habe nur googeln, aber brauchen Sie 'mapper.registerModule (DefaultScalaModule)'? Haben Sie auch versucht, eine Person aus einem literalen String außerhalb von Spark zu analysieren, nur um zu überprüfen, ob dieses Bit in Ordnung ist? –
@TheArchetypalPaul Dies kann mit wenig Google-Hilfe und einige Debugging gelöst werden .. –
@ YuvalItzchakov, nun, ja, aber ich bin mir nicht sicher, warum Sie diesen Kommentar an mich gerichtet! –