1+ package net .sansa_stack .query .spark .server
2+
3+ import org .aksw .sparqlify .backend .postgres .DatatypeToStringCast
4+ import org .aksw .sparqlify .core .sql .common .serialization .SqlEscaperBase
5+ import org .aksw .sparqlify .core .algorithms .ViewDefinitionNormalizerImpl
6+ import org .aksw .sparqlify .core .algorithms .CandidateViewSelectorSparqlify
7+ import net .sansa_stack .rdf .partition .sparqlify .SparqlifyUtils2
8+ import org .apache .spark .sql .catalyst .ScalaReflection
9+ import net .sansa_stack .rdf .spark .sparqlify .BasicTableInfoProviderSpark
10+ import org .aksw .sparqlify .util .SqlBackendConfig
11+ import org .aksw .sparqlify .algebra .sql .nodes .SqlOpTable
12+ import org .apache .spark .sql .types .StructType
13+ import org .aksw .sparqlify .config .syntax .Config
14+ import org .aksw .sparqlify .util .SparqlifyUtils
15+ import org .aksw .sparqlify .validation .LoggerCount
16+ import net .sansa_stack .rdf .partition .core .RdfPartitionDefault
17+ import org .apache .spark .sql .SparkSession
18+ import com .typesafe .scalalogging .LazyLogging
19+ import org .apache .spark .rdd .RDD
20+ import org .apache .spark .sql .Row
21+ import org .aksw .sparqlify .core .interfaces .SparqlSqlStringRewriter
22+
23+ object SparqlifyUtils3
24+ extends LazyLogging
25+ {
26+ def createSparqlSqlRewriter (sparkSession : SparkSession , partitions : Map [RdfPartitionDefault , RDD [Row ]]): SparqlSqlStringRewriter = {
27+ val config = new Config ()
28+ val loggerCount = new LoggerCount (logger.underlying)
29+
30+
31+ val backendConfig = new SqlBackendConfig (new DatatypeToStringCast (), new SqlEscaperBase (" " , " " )) // new SqlEscaperBacktick())
32+ val sqlEscaper = backendConfig.getSqlEscaper()
33+ val typeSerializer = backendConfig.getTypeSerializer()
34+
35+
36+ val ers = SparqlifyUtils .createDefaultExprRewriteSystem()
37+ val mappingOps = SparqlifyUtils .createDefaultMappingOps(ers)
38+
39+
40+ val candidateViewSelector = new CandidateViewSelectorSparqlify (mappingOps, new ViewDefinitionNormalizerImpl ());
41+
42+ val views = partitions.map {
43+ case (p, rdd) =>
44+ //
45+ println(" Processing: " + p)
46+
47+ val vd = SparqlifyUtils2 .createViewDefinition(p);
48+ val tableName = vd.getRelation match {
49+ case o : SqlOpTable => o.getTableName
50+ case _ => throw new RuntimeException (" Table name required - instead got: " + vd)
51+ }
52+
53+ val scalaSchema = p.layout.schema
54+ val sparkSchema = ScalaReflection .schemaFor(scalaSchema).dataType.asInstanceOf [StructType ]
55+ val df = sparkSession.createDataFrame(rdd, sparkSchema)
56+
57+ df.createOrReplaceTempView(tableName)
58+ config.getViewDefinitions.add(vd)
59+ }
60+
61+ val basicTableInfoProvider = new BasicTableInfoProviderSpark (sparkSession)
62+
63+ val rewriter = SparqlifyUtils .createDefaultSparqlSqlStringRewriter(basicTableInfoProvider, null , config, typeSerializer, sqlEscaper)
64+ // val rewrite = rewriter.rewrite(QueryFactory.create("Select * { <http://dbpedia.org/resource/Guy_de_Maupassant> ?p ?o }"))
65+
66+ // val rewrite = rewriter.rewrite(QueryFactory.create("Select * { ?s <http://xmlns.com/foaf/0.1/givenName> ?o ; <http://dbpedia.org/ontology/deathPlace> ?d }"))
67+ rewriter
68+ }
69+
70+ }
0 commit comments