我有一个由ds
分部的蜂巢表,其中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
但我没有从第三个语句中获得任何输出。我想知道为什么,有没有一种优雅的方法可以做到这一点?
在
SQL 语句中使用2017-11-07
字符串时,需要用单引号括起来。您可以像这样将其添加到查询中:
sparkSession.sql("select * from admin_zpw123_user_meta where ds='" + s + "'").show();
我只是在 2017-11-07 中添加’’
然后它就可以工作了,但它仍然不是那么优雅
动作在 Spark 中非常低效,而且你有一个无用的:
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();