使用Java中的JDBC驱动程序将OrientDB连接到Spark的问题

时间:2018-08-28 11:33:10

标签: java apache-spark bigdata orientdb

我们开始在我们的应用程序中使用OrientDB。我们用它来存储许多称为“虚拟树”的“迷你图”和相对元数据。

我们有两个类VirtualTreeNode,分别是Vertex和VirtualTreeMeta,它们存储为Generic类,我们希望使用spark对它们进行一些批处理分析。

用于在Spark中加载数据的代码是:

public void loadData() {
    Map<String, String> properties = new TreeMap<>();
    properties.put("user", "####");
    properties.put("password", "####");
    properties.put("url", "jdbc:orient:remote:localhost:2424/trees-repo");
    properties.put("spark", "true");
    properties.put("dbtable", "VirtualTreeMeta");

    SparkSession session = SparkSession.builder()
                                       .master("local[8]")
                                       .appName("Document Attribute Pruner")
                                       .getOrCreate();

    SQLContext sc = new SQLContext(session);
    Dataset<Row> data = sc.read().format("jdbc").options(properties).load();
    data.show();
}

如果我使用dbtable = VirtualTreeMeta,则一切正常,但是当我尝试与VirtualTreeNode连接时,会发生这种情况:

Exception in thread "main" java.lang.NullPointerException
at com.orientechnologies.orient.jdbc.OrientJdbcResultSetMetaData.lambda$isSigned$5(OrientJdbcResultSetMetaData.java:294)
at java.util.Optional.map(Optional.java:215)
at com.orientechnologies.orient.jdbc.OrientJdbcResultSetMetaData.isSigned(OrientJdbcResultSetMetaData.java:294)
at org.apache.spark.sql.execution.datasources.jdbc.JdbcUtils$.getSchema(JdbcUtils.scala:232)
at org.apache.spark.sql.execution.datasources.jdbc.JDBCRDD$.resolveTable(JDBCRDD.scala:64)
at org.apache.spark.sql.execution.datasources.jdbc.JDBCRelation.<init>(JDBCRelation.scala:113)
at org.apache.spark.sql.execution.datasources.jdbc.JdbcRelationProvider.createRelation(JdbcRelationProvider.scala:45)
at org.apache.spark.sql.execution.datasources.DataSource.resolveRelation(DataSource.scala:330)
at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:152)
at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:125)
at qProj.collector.treevirt.pruning.VirtualTreePruner.loadData(VirtualTreePruner.java:36)
at qProj.collector.treevirt.pruning.Main.main(Main.java:5)

我们不知道为什么会这样。可以通过与通用类不同的方式来访问顶点类吗?

配置中是否有错误?我们使用的是OrientDB 3.0.6的最新版本,Spark是2.1。

0 个答案:

没有答案