com.arangodb.velocypack.exception.VPackParserException: java.lang.InstantiationException
com.arangodb.velocypack.exception.VPackParserException: java.lang.InstantiationException
我正在尝试将我的 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) 行
你的 class netflow
需要一个无参数的构造函数。
VelocyPack 反序列化器将传入的 VelocyPack 反序列化为 Java/Scala 对象 - 在 Java 驱动程序的底层 - 需要它来实例化你的 class.
更新:
您无需解析它即可使用字段名称。您的案例 class 可以与存储的文档具有相同的字段。来自 java 驱动程序的 serializer/deserializer 可以使用它。但是你还需要一个无参数的构造函数。
您的案例 class 可能如下所示:
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)}
}
我正在尝试将我的 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) 行
你的 class netflow
需要一个无参数的构造函数。
VelocyPack 反序列化器将传入的 VelocyPack 反序列化为 Java/Scala 对象 - 在 Java 驱动程序的底层 - 需要它来实例化你的 class.
更新:
您无需解析它即可使用字段名称。您的案例 class 可以与存储的文档具有相同的字段。来自 java 驱动程序的 serializer/deserializer 可以使用它。但是你还需要一个无参数的构造函数。
您的案例 class 可能如下所示:
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)}
}