如何从 spark sql 访问本地镶木地板文件?
Posted
技术标签:
【中文标题】如何从 spark sql 访问本地镶木地板文件?【英文标题】:How to access local parquet files from spark sql? 【发布时间】:2016-06-02 13:25:46 【问题描述】:我正在使用 Dropwizard Web 服务来访问许多镶木地板文件,我需要使用“真实”的 sql(字符串)而不是 spark DDL(我已经尝试过并且确实有效,但不能满足我的需求) .我正在使用独立模式下的 spark 从 eclipse 启动服务。 Spark 版本是 1.4.1。
问题是 spark 无法解析纯 SQL 中的 parquet 引用,调用如下:(我在 ./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 语句,我已经尝试了所有我能想到的排列方式(省略 ./、绝对路径、省略反引号等),但没有任何乐趣。
parquet 访问是通过 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】:这是由 spark-sql 1.4.1 中的错误引起的。升级到 1.6.1 修复了它。
【讨论】:
以上是关于如何从 spark sql 访问本地镶木地板文件?的主要内容,如果未能解决你的问题,请参考以下文章