我使用AWS EMR的Spark 1.3.1。我使用HiveContext创建了一个火花表,可以从Hive中看到这个(使用"show tables").
但是当我尝试查询table(Select..),
时会抛出以下错误:
hdfs:// IP:9000 / user / hive / warehouse / tablename / part-r-00001.parquet not not 一个SequenceFile
当我使用"描述tablename"时,它显示:
col array<string> from deserializer
&#34;显示表格&#34;正确返回表名。
知道为什么镶木地板文件不是Spark正在生成的有序文件以及如何解决这个问题?我需要从Hive查询Spark表并使用来自RStudio或其他工具的JDBC连接。
答案 0 :(得分:0)
(发表评论作为答案)问题是让Spark和Hive都使用相同版本的Parquet,并了解如何访问相同的数据。
看到一个例子Spark中一个有用的属性是:
array_view<double>
对于通过JDBC访问Spark,基于HiveServer2的Spark的Thrift服务器需要在与Hive附带的现有HiveServer2不同的端口上启动和运行。见https://spark.apache.org/docs/latest/sql-programming-guide.html#running-the-thrift-jdbcodbc-server
在端口10001上启动JDBC的Thrift服务的示例命令:
set spark.sql.hive.convertMetastoreParquet=false;
请务必注意,start-thriftserver.sh采用与资源分配(执行程序,核心,内存等)的spark-submit相同的熟悉选项,因此进行相应设置。