我在Parquet格式的s3数据上创建了一个配置单元表,并用一个名为eventdate的列进行分区。
1) 使用配置单元查询时,它会返回表和文件架构中名为“headertime”的列的数据。
select headertime from dbName.test_bug where eventdate=20180510 limit 10
2) 在scala笔记本中,当直接从一个同样有效的特定分区加载文件时,
val session = org.apache.spark.sql.SparkSession.builder
.appName("searchRequests")
.enableHiveSupport()
.getOrCreate;
val searchRequest = session.sqlContext.read.parquet("s3n://bucketName/module/search_request/eventDate=20180510")
searchRequest.createOrReplaceTempView("SearchRequest")
val exploreDF = session.sql("select headertime from SearchRequest where SearchRequestHeaderDate='2018-05-10' limit 100")
exploreDF.show(20)
这也会显示列“headertime”的值
3) 但是,当使用spark sql直接查询配置单元表时,如下所示,
val exploreDF = session.sql("select headertime from tier3_vsreenivasan.test_bug where eventdate=20180510 limit 100")
exploreDF.show(20)
它总是返回null。
我打开了parquet文件,看到列headertime中有值,但不确定sparksql为什么不能读取该列的值。
如果有人能指出sparksql从何处获得模式,这会很有帮助?我希望它的行为类似于Hive查询
暂无答案!
目前还没有任何答案,快来回答吧!