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