我想根据使用 Apache Drill 对 CSV 数据(在 HDFS 上)执行查询的结果创建 Spark SQL DataFrame。我成功配置了 Spark SQL,使其通过 JDBC 连接到 Drill:
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 执行两个查询:第一个查询获取架构,第二个查询检索实际数据:
SELECT * FROM (SELECT * FROM dfs.output.`my_view`) WHERE 1=0
SELECT "field1","field2","field3" FROM (SELECT * FROM dfs.output.`my_view`)
第一个成功,但在第二个中,Spark 将字段括在双引号内,这是 Drill 不支持的,因此查询失败。
有人设法让这种集成发挥作用吗?
谢谢你!
您可以为此添加 JDBC Dialect 并在使用 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)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)