2016-02-18 6 views
5

Я хотел бы создать Spark SQL DataFrame из результатов запроса, выполненного над данными CSV (на HDFS) с помощью Apache Drill. Я успешно настроил Спарк SQL, чтобы сделать его подключения к Дрель через JDBC:Интеграция Spark SQL и Apache Drill через 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(); 

Спарк SQL выполняет два запроса: первый, чтобы получить схему, а второй один, чтобы получить фактические данные:

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

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

Первый успешно, но во втором Spark включает поля в двойных кавычках, что не то, что Drill не поддерживает, поэтому запрос не выполняется.

Неужели кому-то удалось заставить эту интеграцию работать?

Спасибо!

ответ

1

вы можете добавить JDBC Диалект для этого и зарегистрировать диалект перед использованием JDBC разъема

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

Это выглядит как Scala, но вопрос OP был в Java. – paisanco

+0

Правда, я все же принимаю ответ, поскольку он указывает мне на JdbcDialect. Благодаря! –