我有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
,但我没有从第三个语句中获得任何输出。我想知道为什么并且有一种优雅的方式来做到这一点?
答案 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();