com.arangodb.velocypack.exception.VPackParserException:java.lang.InstantiationException

时间:2017-01-11 16:10:02

标签: scala apache-spark arangodb

我正在尝试将我的ArangoDb数据库与scala连接,但是当建立连接时,我正在进行操作,我有一个VPackParserException错误。我的代码:

import com.arangodb.spark.{ArangoSpark, ReadOptions}
import org.apache.spark.SparkContext
import org.apache.spark.SparkConf
import scala.beans.BeanProperty

object ArangotoSpark {

def main(args: Array[String]) {
  case class netflow(@BeanProperty SrcHost: String,
                   @BeanProperty DstHost: String,
                   @BeanProperty SrcPort: String,
                   @BeanProperty DstPort: String,
                   @BeanProperty Protocol: String,
                   @BeanProperty StartTS: String,
                   @BeanProperty EndTS: String,
                   @BeanProperty Packets: Int,
                   @BeanProperty Bytes: Int) {  }

  val conf = new SparkConf().setAppName("Simple Application").setMaster("local[*]")
    .set("arangodb.host", "127.0.0.2")
    .set("arangodb.port", "8529")
    .set("arangodb.user", "root")
    .set("arangodb.password", "rut")
    .set("arangodb.database", "netflow")
  val sc = new SparkContext(conf)
  val rdd = ArangoSpark.load[netflow](sc, "N201701031130", ReadOptions("netflow"))
  val rdd2 = rdd.filter { x => x.SrcHost.matches("15.33.165.30") }
  rdd2.count()
  }
}

感谢任何帮助。谢谢。

更新:现在我的代码如下所示:

case class nf (@BeanProperty cadena: String){
   def this() = this(cadena = null)}
val rdd = ArangoSpark.load[nf](sc, "N201701031130", ReadOptions("netflow"))
println(rdd.count())
println("*************************************")
rdd.collect.foreach(println(_))

rdd.count给出正确数量的文档,但是当我尝试打印它们时,我只有 nf(null)

1 个答案:

答案 0 :(得分:1)

您的班级netflow需要无参数构造函数。

VelocyPack反序列化器将传入的VelocyPack反序列化为Java / Scala对象 - 在Java驱动程序的引擎下 - 需要它来实例化您的类。

<强>更新

您不必解析它以使用字段名称。您的案例类可以与存储的文档具有相同的字段。 java驱动程序中的序列化器/反序列化器可以使用它。但是你还需要一个无参数的构造函数。

您的案例类可能如下所示:

case class netflow(@BeanProperty SrcHost: String,
                   @BeanProperty DstHost: String,
                   @BeanProperty SrcPort: String,
                   @BeanProperty DstPort: String,
                   @BeanProperty Protocol: String,
                   @BeanProperty StartTS: String,
                   @BeanProperty EndTS: String,
                   @BeanProperty Packets: Int,
                   @BeanProperty Bytes: Int) {
  def this() = this(null,null,null,null,null,null,null,null,null)}
}