我'm using Spark 1.3.1 from AWS EMR. I' ve使用HiveContext创建了一个火花表,可以从Hive看到这个(使用 "show tables").
但是当我尝试查询 table(Select..),
时它会抛出以下错误:
hdfs:// IP:9000 / user / hive / warehouse / tablename / part-r-00001.parquet不是SequenceFile
当我使用“describe tablename”时,它显示:
col array<string> from deserializer
“显示表”正确返回表名 .
知道为什么镶木地板文件不是Spark正在生成的顺序文件以及如何解决这个问题?我需要从Hive查询Spark表并使用来自RStudio或其他工具的JDBC连接 .
1 回答
(发表评论作为答案)问题是让Spark和Hive都使用相同版本的Parquet并了解如何访问相同的数据 .
一个例子可以在https://github.com/awslabs/emr-bootstrap-actions/blob/master/spark/examples/parquet-sparksql-hive-compatibility.md看到
Spark中的一个有用的属性是:
至于通过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服务的示例命令:
请务必注意,start-thriftserver.sh采用了与资源分配(执行程序,内核,内存等)的spark-submit相同的熟悉选项 .