Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala com.arangodb.velocypack.exception.VPackParserException:java.lang.InstanceionException_Scala_Apache Spark_Arangodb - Fatal编程技术网

Scala com.arangodb.velocypack.exception.VPackParserException:java.lang.InstanceionException

Scala com.arangodb.velocypack.exception.VPackParserException:java.lang.InstanceionException,scala,apache-spark,arangodb,Scala,Apache Spark,Arangodb,我正在尝试用scala连接ArangoDb数据库,但是当连接完成并且我正在执行操作时,出现了VPackParserException错误。我的代码: import com.arangodb.spark.{ArangoSpark, ReadOptions} import org.apache.spark.SparkContext import org.apache.spark.SparkConf import scala.beans.BeanProperty object ArangotoSpa

我正在尝试用scala连接ArangoDb数据库,但是当连接完成并且我正在执行操作时,出现了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)行

您的类
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)}
}

。我尝试了这个方法,它可以工作:case类nf(cadena:String){def this()=this(cadena=null)},所以我必须解析它才能使用字段名。谢谢你,类型不匹配;找到:Null(Null)必需:Int def this()=this(Null,Null,Null,Null,Null,Null,Null)}将加载方法中的类型更改为String正在工作:
ArangoSpark.load[String](sc,“N201701031130”,ReadOptions(“netflow”)