通过sparksql选择来自配置单元的最新数据分区

时间:2017-11-08 02:31:03

标签: java apache-spark hive apache-spark-sql hiveql

我有ds分区的hive表,其中ds是一个类似2017-11-07的字符串。由于字符串是可比的,我想通过sparksql从hive中选择最新分区的数据,所以我写了这段代码:

Dataset<Row> ds = sparkSession.sql("select max(ds) from admin_zpw123_user_meta");

String s = ds.first().getString(0);

sparkSession.sql("select * from admin_zpw123_user_meta where ds="+s).show();

我可以打印字符串s,即2017-11-07,但我没有从第三个语句中获得任何输出。我想知道为什么并且有一种优雅的方式来做到这一点?

3 个答案:

答案 0 :(得分:1)

在SQL语句中使用时,您需要在2017-11-07字符串周围添加单引号。您可以将其添加到查询中,如下所示:

sparkSession.sql("select * from admin_zpw123_user_meta where ds='" + s + "'").show();

答案 1 :(得分:0)

我只是将’’添加到2017-11-07然后它可以工作,但它仍然不那么优雅

答案 2 :(得分:0)

动作的火花效率很低,并且您的动作无效:

String s = ds.first().getString(0);

要解决此问题,只需执行以下操作即可仅过滤最新的分区日期:

sparkSession.sql("select * from admin_zpw123_user_meta where ds in (select max(distinct ds) from admin_zpw123_user_meta)").show();