Java JSON4s可以';找不到带spark的构造函数

Java JSON4s可以';找不到带spark的构造函数,java,scala,apache-spark,json4s,Java,Scala,Apache Spark,Json4s,我在spark作业中尝试解析json时遇到了一个问题。我正在使用spark 1.1.0、json4s和Cassandra spark连接器以及DSE 4.6。引发的异常是: org.json4s.package$MappingException: Can't find constructor for BrowserData org.json4s.reflect.ScalaSigReader$.readConstructor(ScalaSigReader.scala:27) org

我在spark作业中尝试解析json时遇到了一个问题。我正在使用spark 1.1.0、json4s和Cassandra spark连接器以及DSE 4.6。引发的异常是:

org.json4s.package$MappingException: Can't find constructor for BrowserData      org.json4s.reflect.ScalaSigReader$.readConstructor(ScalaSigReader.scala:27)
   org.json4s.reflect.Reflector$ClassDescriptorBuilder.ctorParamType(Reflector.scala:108)
        org.json4s.reflect.Reflector$ClassDescriptorBuilder$$anonfun$6.apply(Reflector.scala:98)
        org.json4s.reflect.Reflector$ClassDescriptorBuilder$$anonfun$6.apply(Reflector.scala:95)
        scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244)
我的代码如下所示:

case class BrowserData(navigatorObjectData: Option[NavigatorObjectData],
                       flash_version: Option[FlashVersion],
                       viewport: Option[Viewport],
                       performanceData: Option[PerformanceData])

.... other case classes

def parseJson(b: Option[String]): Option[String] = {
    implicit val formats = DefaultFormats
      for {
        browserDataStr <- b
        browserData = parse(browserDataStr).extract[BrowserData]
        navObject <- browserData.navigatorObjectData
        userAgent <- navObject.userAgent
      } yield (userAgent)
  }

def getJavascriptUa(rows: Iterable[com.datastax.spark.connector.CassandraRow]): Option[String] = {
  implicit val formats = DefaultFormats
  rows.collectFirst { case r if r.getStringOption("browser_data").isDefined  =>
    parseJson(r.getStringOption("browser_data"))
  }.flatten
}

def getRequestUa(rows: Iterable[com.datastax.spark.connector.CassandraRow]): Option[String] = {
  rows.collectFirst { case r if r.getStringOption("ua").isDefined  =>
    r.getStringOption("ua")
  }.flatten
}

def checkUa(rows: Iterable[com.datastax.spark.connector.CassandraRow], sessionId: String): Option[Boolean] = {
  for {
    jsUa <- getJavascriptUa(rows)
    reqUa <- getRequestUa(rows)
  } yield (jsUa == reqUa)
}

def run(name: String) = {
  val rdd = sc.cassandraTable("beehive", name).groupBy(r => r.getString("session_id"))
  val counts = rdd.map(r => (checkUa(r._2, r._1)))
  counts
}
案例类BrowserData(navigatorObjectData:选项[navigatorObjectData],
flash_版本:选项[FlashVersion],
视口:选项[视口],
performanceData:选项[performanceData])
.... 其他个案类别
def parseJson(b:Option[String]):Option[String]={
隐式val格式=默认格式
为了{

browserDataStr您的数据是否与案例类结构匹配?它是否独立工作?您是否对其进行了单元测试?您的案例类是顶级的吗?我今天也遇到了这个问题,结果证明我的案例类属性与JSON属性之间存在差异。