2017-09-14 180 views
1

当前我试图通过最新的date_processed过滤Hive表。在读取Hive表之前过滤分区(Spark)

表被分区。

系统 DATE_PROCESSED 地区

我已经成功地过滤它的唯一办法,是做一个连接查询:

query = "select * from contracts_table as a join (select (max(date_processed) as maximum from contract_table as b) on a.date_processed = b.maximum" 

这种方式实在是费时,因为我必须做的25个表的相同程序。

任何人知道的方式来直接读取表的最新加载分区星火< 1.6

这是我使用阅读方法。

public static DataFrame loadAndFilter (String query) 
{ 
     return SparkContextSingleton.getHiveContext().sql(+query); 
} 

非常感谢!

回答

1

数据帧的所有表分区可以通过接收:

val partitionsDF = hiveContext.sql("show partitions TABLE_NAME") 

值可以被解析,为获得最大的价值。

+0

我认为这可以工作,并提高性能,但实际上并没有完全解决问题,因为你钢需要加载20个新的数据帧,计算最大值,然后过滤其他表....任何生病尝试它,并看看表现如何。谢谢! –