Проблемы с подключением OrientDB к Spark с использованием драйвера JDBC в Java - PullRequest
0 голосов
/ 28 августа 2018

мы начинаем использовать 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)

Мы не можем понять, почему это происходит. Возможно ли, что к классам Vertex обращаются иначе, чем к классам Generic?

Есть ли ошибки в конфигурации? Мы используем последнюю сборку OrientDB 3.0.6, а Spark - 2.1.

...