2016-02-18 22 views
5

Chciałbym stworzyć Spark SQL DataFrame z wyników zapytania wykonanego na danych CSV (na HDFS) za pomocą Apache Drill. Pomyślnym skonfigurowaniu Spark SQL, aby połączyć się wywiercić poprzez JDBC:Integracja Spark SQL i Apache Drill poprzez JDBC

Map<String, String> connectionOptions = new HashMap<String, String>(); 
connectionOptions.put("url", args[0]); 
connectionOptions.put("dbtable", args[1]); 
connectionOptions.put("driver", "org.apache.drill.jdbc.Driver"); 

DataFrame logs = sqlc.read().format("jdbc").options(connectionOptions).load(); 

Spark SQL wykonuje dwa zapytania: pierwsza dostać schematu, a drugi do pobierania rzeczywiste dane:

SELECT * FROM (SELECT * FROM dfs.output.`my_view`) WHERE 1=0 

SELECT "field1","field2","field3" FROM (SELECT * FROM dfs.output.`my_view`) 

Pierwszy z nich zakończył się powodzeniem, ale w drugim Spark zamyka pola w podwójnych cudzysłowach, co nie jest obsługiwane przez Wiertło, więc zapytanie kończy się niepowodzeniem.

Czy ktoś zdołał uruchomić tę integrację?

Dziękujemy!

Odpowiedz

1

można dodać JDBC Dialekt tego dialektu i zarejestrować przed użyciem jdbc złącze

case object DrillDialect extends JdbcDialect { 

    def canHandle(url: String): Boolean = url.startsWith("jdbc:drill:") 

    override def quoteIdentifier(colName: java.lang.String): java.lang.String = { 
    return colName 
    } 

    def instance = this 
} 

JdbcDialects.registerDialect(DrillDialect) 
+0

to wygląda Scala ale pytanie OP był w Javie. – paisanco

+0

Prawda, mimo to akceptuję odpowiedź, ponieważ wskazuje ona na JdbcDialect. Dzięki! –