如何从spark sql访问本地镶木地板文件?

时间:2016-06-02 13:25:47

标签: apache-spark apache-spark-sql parquet

我正在使用Dropwizard网络服务来访问一些拼花文件,我需要使用“真正的”sql(字符串)而不是火花DDL(我已经尝试过并且确实有效但不符合我的需求) 。我正在以独立模式启动带有spark的eclipse服务。 Spark版本是1.4.1。

问题是spark无法在纯SQL中解析镶木地板引用,如下所示:(我在./bro/conn.parquet中启动Web服务的文件夹中有一个测试副本)

DataFrame df = sqlContext
        .sql(sql)
        .limit(5)
;

例如

http://localhost:8080/table/query?sql=select%20ts%20from%20%20parquet.`./bro/conn.parquet` 

因下面显示的错误而失败。我已经尝试了所有我能想到的sql语句的排列(省略./,绝对路径,省略反引号等)但没有快乐。

通过SQL工作或仅使用DDL API(我不能用于此用例)进行镶木地板访问。有没有办法使用DDL api加载数据帧(DataFrame df = sqlContext.read()。parquet(path))然后将完整的sql命令(减去from子句)应用于结果?

0:0:0:0:0:0:0:1 - - [02/Jun/2016:12:47:06 +0000] "GET /table/query?sql=select%20ts%20from%20%20parquet.`./bro/conn.parquet` HTTP/1.1" 500 1483 74 74
ERROR [2016-06-02 13:02:29,810] com.yammer.dropwizard.jersey.LoggingExceptionMapper: Error handling a request: fc462d5554bce965
! java.lang.RuntimeException: Table Not Found: parquet../bro/conn.parquet
! at scala.sys.package$.error(package.scala:27)
! at org.apache.spark.sql.catalyst.analysis.SimpleCatalog$$anonfun$1.apply(Catalog.scala:115)
! at org.apache.spark.sql.catalyst.analysis.SimpleCatalog$$anonfun$1.apply(Catalog.scala:115)
! at scala.collection.MapLike$class.getOrElse(MapLike.scala:128)
! at scala.collection.AbstractMap.getOrElse(Map.scala:58)
! at org.apache.spark.sql.catalyst.analysis.SimpleCatalog.lookupRelation(Catalog.scala:115)
! at org.apache.spark.sql.catalyst.analysis.Analyzer$ResolveRelations$.getTable(Analyzer.scala:222)
! at org.apache.spark.sql.catalyst.analysis.Analyzer$ResolveRelations$$anonfun$apply$7.applyOrElse(Analyzer.scala:233)
! at org.apache.spark.sql.catalyst.analysis.Analyzer$ResolveRelations$$anonfun$apply$7.applyOrElse(Analyzer.scala:229)
! at org.apache.spark.sql.catalyst.trees.TreeNode$$anonfun$3.apply(TreeNode.scala:222)
! at org.apache.spark.sql.catalyst.trees.TreeNode$$anonfun$3.apply(TreeNode.scala:222)
! at org.apache.spark.sql.catalyst.trees.CurrentOrigin$.withOrigin(TreeNode.scala:51)
! at org.apache.spark.sql.catalyst.trees.TreeNode.transformDown(TreeNode.scala:221)
! at org.apache.spark.sql.catalyst.trees.TreeNode$$anonfun$4.apply(TreeNode.scala:242)
...
0:0:0:0:0:0:0:1 - - [02/Jun/2016:13:02:29 +0000] "GET /table/query?sql=select%20ts%20from%20%20parquet.`./bro/conn.parquet` HTTP/1.1" 500 1483 20 20

1 个答案:

答案 0 :(得分:0)

这是由spark-sql 1.4.1中的错误引起的。升级到1.6.1修复它。